帮忙看下这段代码有什么问题吗(10093错误码)
在部分机器上面会出现第一次循环socket成功,但是第二次循环报10093的问题。
稍后上错误日志。
代码如下:
- C/C++ code
#include <Winsock2.h>#include <stdio.h>#pragma comment(lib, "ws2_32.lib ") void main(){ //加载socket int iCount = 0; printf("Input the times you want to loop.\n"); scanf("%d", &iCount); for (int iLoop=0;iLoop<iCount;++iLoop) { WORD wVrsnRqst; WSADATA wsaData; int err; wVrsnRqst = MAKEWORD(1, 1); err = WSAStartup(wVrsnRqst, &wsaData); printf("WSAStartup completed.\n"); if (0 != err) { printf("Failed in starting socket!\n"); system("pause"); return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { printf("Start to clean socket!\n"); WSACleanup(); system("pause"); return; } SOCKET sockClnt = socket(AF_INET, SOCK_STREAM, 0); printf("Create socket. The last error is %d\n", WSAGetLastError()); printf("sockClnt的值为:%d\n", sockClnt); unsigned long ul = 0; if( ioctlsocket(sockClnt, FIONBIO, (unsigned long*)&ul) == SOCKET_ERROR ) { printf("The last error is: %d\n", WSAGetLastError()); printf("failed in ioctlsocket\n"); system("pause"); return; } printf("Succeed in setting block mod.\n"); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("211.147.87.211"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(8022); //发出请求 printf("Try connecting to 211.147.87.211, 8022...\n"); int iRet = connect(sockClnt, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); printf("The return of connect is %d.\n", iRet); if (iRet == SOCKET_ERROR) { printf("The last error is %d.\n", WSAGetLastError()); } //接收数据 //char recvBuf[100]; //recv(sockClnt, recvBuf, 100, 0); //printf("%s\n", recvBuf); //send(sockClnt, "I am client!", strlen("I am client!") + 1, 0); if (sockClnt > 0) { iRet = closesocket(sockClnt); printf("close socket return:%d, and last error is:%d\n", iRet, WSAGetLastError()); sockClnt = 0; } iRet = WSACleanup(); printf("WSACleanup return %d, and last error is:%d\n", iRet, WSAGetLastError()); } system("pause");}[解决办法]
WSAStartup, WSACleanup放到循环外。
这样简单的代码不用自己写,论坛上就有:
http://download.csdn.net/detail/geoff08zhang/4571358
[解决办法]
请看1L。HOHO