用socket接收UDP数据包,采用select模式查询数据,数据明明发出来了,而且用Ethereal在二台电脑上抓包都可以看到,select死都检测不到,怎么回事呀?void WSAUdpSocket::bind(Host &h)
{
struct sockaddr_in localAddr; if ((socketNum = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
throw SockException("Can`t open socket"); setblocking(false);
//setReuse(true); memset(&localAddr,0,sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(7809); //htons(h.port);
localAddr.sin_addr.s_addr = INADDR_ANY; if( ::bind (socketNum, (sockaddr *)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
throw SockException("Can`t bind socket");}bool WSAUdpSocket::readready()
{
timeval tv;
fd_set fdread;
FD_ZERO(&fdread);
FD_SET(socketNum,&fdread);
tv.tv_sec = 0;
tv.tv_usec = 0;
return select(socketNum+1,&fdread,NULL,NULL,&tv) == 1;
}读取的程序中是这样的:WSAUdpSocket *udpSocket;
...... (这里包含bind)
if(udpSocket->readready())
{
   ......   <---------------------在这设了断点,但程序死都不会到这来,但抓包程序能抓到
}