有关socket的select()的问题
FD_ZERO(m_fsetskSnd);
FD_SET(m_sk, m_fsetskSnd);
if(SOCKET_ERROR == select(FD_SETSIZE, (fd_set*)NULL, &m_fsetskSnd,
(fd_set*)NULL, (0, 0)))
return false;
据说上面这段代码中的SOCKET_ERROR, 会出现WSAEWOULDBLOCK值。
但我在MSDN上查到只有:
WSANOTINITIALISED
WSAEFAULT
WSAENETDOWN
WSAEINVAL
WSAEINTR
WSAEINPROGRESS
WSAENOTSOCK
这几个。
请那位大侠给指点一下,这种情况下SOCKET_ERROR, 会不会出现WSAEWOULDBLOCK值?
如果会为什么MSDN的select中又没有说明呢?
此处的socket设为no-block状态。
问题点数:15、回复次数:2Top
1 楼fierygnu(va_list)回复于 2006-03-03 10:08:58 得分 0
据说?据哪里说?Top
2 楼ollydbg(Ollydbg)回复于 2006-03-20 10:55:08 得分 0
select的结果<=0说明超时了,但在你的FD—SET集合里没有有效的SOCKET,如果》0则可进一步根据需要读写
int n = select(0, &readfds, &writefds, NULL, &to );
if ( n > 0 ) //存在有效的Socket
{
if ( FD_ISSET( sock, &readfds ) ) //判断sock是否在当前的可读集合内
{
int iread = recvfrom(sock, buf,sizeof(buf)-1, 0, (sockaddr *)&sockaddr_from, &fromlen);
if(iread > 0)
{
buf[iread]='\0';
ret_string=buf;
}
}
}
Top




