select 函数问题
如题,写了一个压力测试程序,采用多线程,创建多线程(即模拟用户)的时候select函数返回0,想问各位,究竟什么原因导致的超时,如果我把时间设置大点,会减少点错误,但是一旦模拟过多100个,每个循环10个数据包,就会出现超时现象,部分代码如下:
//设置非阻塞方式连接
unsigned long ul = 1;
if (ioctlsocket(sockToServer, FIONBIO, (unsigned long*)&ul) == SOCKET_ERROR)
{
closesocket(sockToServer);
return INVALID_SOCKET;
}
//连接
SOCKADDR_IN ServerAddress;
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_addr.s_addr = dwServerIP;
ServerAddress.sin_port = htons( wPort );
connect(sockToServer, (const struct sockaddr *)&ServerAddress, sizeof(ServerAddress));
//select模型,即设置超时
fd_setfsSet;
intnResult;
structtimeval tvTimeOut;
// Add the source socket into the set
FD_ZERO(&fsSet);
FD_SET(sockToServer, &fsSet);
// Set the timeout value
tvTimeOut.tv_sec = 5;
tvTimeOut.tv_usec = 0;
nResult = select(0, NULL, &fsSet, NULL, &tvTimeOut);
if (nResult <= 0)
{
nError=WSAGetLastError();
closesocket(sockToServer);
return INVALID_SOCKET;
}
//设回阻塞模式
ul = 0 ;
if (ioctlsocket(sockToServer, FIONBIO, (unsigned long*)&ul) == SOCKET_ERROR)
{
closesocket(sockToServer);
return INVALID_SOCKET;
} select 多线程 socket
[解决办法]
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html
[解决办法]
赵老师归来了?