有问题连接到我的networking上的设备。 每当我调用getaddrinfo()时,它将返回11001.我用IP_ADDRESsstring(Global Var)中的许多不同的IP来检查这个。 我用nslookup检查了所有的非工作数字,并且大部分存在于那里。
getaddrinfo-returns-always-11001-host-not-found似乎在问一个类似的问题,但这里没有答案。
目前,我的代码甚至没有试图连接到远程设备,只是试图解决一个IP。 一旦这个工作,我可以移动到更大和更混乱的问题。
执行:
套接字描述符在为multithreadingUDP客户端执行“close()”时没有得到释放
EAGAIN是否会返回缓冲区已满以外的任何内容?
int connectToDevice(char *sendbuf,char *recvbuf,SOCKET ConnectSocket) { WSADATA wsaData; struct addrinfo *result = NULL,*ptr = NULL,hints; struct timeval tval; fd_set rset,wset; int iResult; u_long mode = -1; //Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2),&wsaData); if (iResult != 0) { printf("WSAStartup Failed with error: %dn",iResult); return 1; } ZeroMemory( &hints,sizeof(hints) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; //Resolve the server address and port iResult = getaddrinfo(IP_ADDRESS,DEFAULT_PORT,&hints,&result); if ( iResult != 0 ) { printf("getaddrinfo Failed with error: %dn",iResult); WSACleanup(); return 1; } // Attempt to connect to an address until one succeeds for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) { // Create a SOCKET for connecting to server ConnectSocket = socket(ptr->ai_family,ptr->ai_socktype,ptr->ai_protocol); if (ConnectSocket == INVALID_SOCKET) { printf("socket Failed with error: %ldn",WSAGetLastError()); WSACleanup(); return 1; } //set socket to non-blocking iResult = ioctlsocket(ConnectSocket,FIONBIO,&mode); //if mode is set to non-zero,socket set to non-blocking. if(iResult != NO_ERROR) { printf("socket Failed with error: %ldn",WSAGetLastError()); WSACleanup(); return 1; } // Connect to server. iResult = connect( ConnectSocket,ptr->ai_addr,(int)ptr->ai_addrlen); if (iResult == SOCKET_ERROR ) //if an error and not WSAEWOULDBLOCK,then close socket and try next address { if(WSAEWOULDBLOCK != WSAGetLastError()) { closesocket(ConnectSocket); ConnectSocket = INVALID_SOCKET; continue; //this returns control to the For loop. Ie if a socket error,try next address } else //otherwise if the error was WSAEWOULDBLOCK,then use select to check for connections. { FD_ZERO(&rset); //initialise fd_sets for reading and writing; both the same. FD_SET(ConnectSocket,&rset); wset = rset; //set tval to timeout value tval.tv_sec = TIMEOUT; tval.tv_usec= 0; //select statement //select ignores first parameter //select takes 3xfd_sets,read set,write set,and exception set. //select's last parameter is timeout in the form of a timeval struct //if return == 0,timeout occured. //if return == SOCKET_ERROR,error occured,use WSAGetLastError to check for details. iResult = select(ConnectSocket,&rset,&wset,NULL,&tval); if (iResult ==0) { closesocket(ConnectSocket); printf("Timeout reached,closing socket"); WSACleanup(); return 1; } else if(iResult == SOCKET_ERROR) { printf("socket Failed with error: %ldn",WSAGetLastError()); WSACleanup(); return 1; } } } break; //Breaks out of the for loop. Will only occur if continue not executed } freeaddrinfo(result); if (ConnectSocket == INVALID_SOCKET) { printf("Unable to connect to server!n"); WSACleanup(); return 1; } return 0;}
大部分代码已经从msdn网站上获取locking和股票,但似乎一切正常。
Nginx无法find与Unicorn的unix套接字文件(没有这样的文件或目录)
在Windows中使用IOCP时cachingOVERLAPPED结构
无法连接到StreamSocketListener
Windows 8商店应用程序可以通过UDP / TCP套接字与Windows 7桌面应用程序通信吗?
这是主机找不到的错误代码。 看看WinSock2.h。 搜索WSABASEERR+1001或WSAHOST_NOT_FOUND
我刚刚遇到了这个问题以及… getaddrinfo和gethostbyname都失败了11001错误,但ping / NSLOOKUP正在为相同的主机名工作。
事实证明,我以前使用过符号服务器,并且我已经为我的可执行文件所在的目录下载了所有Win32 DLL的符号。 删除所有的.pdb目录解决了我的问题。
我的猜测是, gethostbyname或getaddrinfo失败,如果你有符号,正在调试应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。