再问; <紧急求救,使用winsock的thread问题>
------------------------以前的问题-----------------------------
http://expert.csdn.net/Expert/topic/1360/1360921.xml?temp=.5598719
我的程序要通过telnet连接31台使用telnet server的服务器,我使用如下方法进行处理
1.继承CWinThread在里面添加SOCKET类型的成员netsock
2.发送函数使用
fd_set writefds;
FD_ZERO(&writefds);
FD_SET(netsock,&writefds);
int sv = ::select(FD_SETSIZE, NULL, &writefds, NULL, &timeout);
if( sv<=0 )return;
::send(netsock,(LPCSTR)cmd,cmd.GetLength(), 0);
的程序来发送
3.接收函数使用
fd_set readfds;
FD_ZERO( &readfds );
FD_SET ( netsock,&readfds );
int sv=::select(FD_SETSIZE, &readfds, NULL, NULL, &timeout);
if( sv <= 0 )return;
int recv_size = ::recv(netsock,buf,buf_len, 0);
的程序来接收
连接4,5台服务器没有任何问题,一连接31台的服务器就会经常发生某几个recv函数返回-1,我用WSAGetLastError函数取得的err id号是183,我想问大家,我的winsocket方法是不是不对,在多线程下是不是有正确的使法?
后来用sniffer监视,发现出错的socket连接出现以下现象;
--------------------用sniffer监视的结果----------------------
1.收到数据包A,程序判断内容,是期待内容 (sniffer里显示某个服务器发数据包A到程序主机)
2.程序发送数据包B,程序用函数send,结果OK(!!! sniffer里没有数据包B的发送纪录)
3.recv函数返回-1(!!! sniffer里显示那个服务器重发数据包A 5次到程序主机)
我想问大家有谁了知道为什么会发生这种情况