情况是这样的:我开了5个线程,都做数据的发送和接收工作,然后,我突然
关掉一端,另外一端就还是等待,等待。阻塞掉了。怎么回事呢?代码部分:
node->sock.fd_array[0]=node->m_ServSocket.m_hSocket;
node->sock.fd_count=1;
error=select(0,&(node->sock),NULL,NULL,&iTimeout);
if (error!=1)
goto endto;
error=node->m_ServSocket.Receive(ibuffer,200);
关掉一端,另外一端就还是等待,等待。阻塞掉了。怎么回事呢?代码部分:
node->sock.fd_array[0]=node->m_ServSocket.m_hSocket;
node->sock.fd_count=1;
error=select(0,&(node->sock),NULL,NULL,&iTimeout);
if (error!=1)
goto endto;
error=node->m_ServSocket.Receive(ibuffer,200);
另外一端,已经关闭了,没法子看啊to RedFire:
我只允许值等于1的情况,所以,阻塞肯定不是在select上面阿
fd_set fds;
FD_ZERO(&fds);
FD_SET(pAccept->m_acceptSock,&fds);
while(1){
select(pAccept->m_acceptSock+1,&fds,NULL,NULL,NULL);
if(FD_ISSET(pAccept->m_acceptSock,&fds)){
int nBytes=read(pAccept->m_acceptSock,pAccept->m_buff+pAccept->m_buffLen,20);
if(nBytes<0){
pAccept->m_pNetServer->ClientClose(pAccept);
pAccept->m_threadID=0;
return NULL;
}
else if(nBytes>0){
pAccept->m_buffLen+=nBytes;
pAccept->m_pNetServer->ClientReceive(pAccept);
}
你可以参照一下,这样可以么?