aJ5dY4aD9y
Do³±czy³: 09 Maj 2014 Posty: 99
|
Wys³any: Pon Maj 12, 2014 10:01 Temat postu: WSAConnect returns WSAEINVAL on WindowsXP |
|
|
DWORD error = WSAGetLastError(); return error; void main() SOCKET sock; WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), wsaData) != 0) { fprintf(stderr, "Socket Initialization Error. Program aborted\n"); return; for (int i = 0; i 1000; i) struct addrinfo hints; struct addrinfo *res = NULL; memset(hints, 0, sizeof(hints)); hints.ai_flags = AI_PASSIVE; hints.ai_socktype = SOCK_STREAM; hints.ai_family = AF_INET; hints.ai_protocol = IPPROTO_TCP; if (0 != getaddrinfo("172.20.1.59", "8091", hints, res)) { fprintf(stderr, "GetAddrInfo Error. Program aborted\n"); closesocket(sock); WSACleanup(); return; struct addrinfo *ptr = 0; for (ptr=res; ptr != NULL ;ptr=ptr-ai_next) sock = WSASocket(ptr-ai_family, ptr-ai_socktype, ptr-ai_protocol, NULL, 0, NULL); // if (sock == INVALID_SOCKET) int err = getError(sock); else { u_long noblock = 1; if (ioctlsocket(sock, FIONBIO, noblock) == SOCKET_ERROR) { int err = getError(sock); closesocket(sock); sock = INVALID_SOCKET; break; } } int ret; do ret = WSAConnect(sock, ptr-ai_addr, (int)ptr-ai_addrlen, NULL, NULL, NULL, NULL); if (ret == SOCKET_ERROR) { int error = getError(sock); if (error == WSAEWOULDBLOCK) { Sleep(5); continue; else if (error == WSAEISCONN) fprintf(stderr, " "); closesocket(sock); sock = SOCKET_ERROR; break; else if (error == 10037) fprintf(stderr, "-"); closesocket(sock); sock = SOCKET_ERROR; break; else fprintf(stderr, "Connect Error. [%d]\n", error); closesocket(sock); sock = SOCKET_ERROR; break; } else int one = 1; setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char*)one, sizeof(one)); fprintf(stderr, "OK\n"); break; xboter 2014 |
|