socket创建失败,WSAGetLastError返回0
socket创建失败,WSAGetLastError返回0,偶尔会出现这样正常吗?
DWORD _stdcall thread(LPVOID lp){ SOCKET _socket; _socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (SOCKET_ERROR == _socket) { char tmp[55]; sprintf(tmp, "socket创建失败,原因:%d", WSAGetLastError()); OutputDebugString(tmp); Sleep(2000); return SOCKET_ERROR; } sockaddr_in clientAddr; memset(&clientAddr, 0, sizeof(clientAddr)); clientAddr.sin_family = AF_INET; clientAddr.sin_addr.s_addr = inet_addr("111.178.146.10"); clientAddr.sin_port = ::htons(u_short(2001)); int iMode = 1; ioctlsocket(_socket,FIONBIO, (u_long FAR*) &iMode); FD_SET WriteSet; timeval timeout; timeout.tv_sec = 2; // 检测时间2秒 timeout.tv_usec = 0; char error; int len = sizeof(char); BOOL bReuseaddr=TRUE; setsockopt(_socket,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); if ( 0 != connect(_socket, (SOCKADDR*)&clientAddr, sizeof(clientAddr)) ) { FD_ZERO(&WriteSet); FD_SET(_socket, &WriteSet); if ( select(0, NULL, &WriteSet, NULL, &timeout) > 0 ) { getsockopt(_socket, SOL_SOCKET, SO_ERROR, &error, &len); if (error != 0) { char tmp[55]; sprintf(tmp, "socket创建失败,原因:%d", WSAGetLastError()); OutputDebugString(tmp); closesocket(_socket); return SOCKET_ERROR; } } else { char tmp[55]; sprintf(tmp, "socket创建失败,原因:%d", WSAGetLastError()); OutputDebugString(tmp); closesocket(_socket); return SOCKET_ERROR; } } OutputDebugString("连接成功"); Sleep(100000000); return 0;}void CConnectDlg::OnOK() { WSADATA m_wsaD; if ( 0 != WSAStartup(0x202,&m_wsaD) ) { ::MessageBox(0, "初始化WSA失败!", 0, 0); } for (int i = 0; i < 1000; i++) { CreateThread(0, 0, thread, 0, 0, 0); Sleep(100); }}