帮忙看下这段代码有什么问题吗(10093错误码)
在部分机器上面会出现第一次循环socket成功,但是第二次循环报10093的问题。
稍后上错误日志。
代码如下:
#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