情况如下:

fd_set已创建并初始化:

fd_set readset;                       //fd_set named readset
FD_ZERO(&readset);                    //clearing fd_set
FD_SET(listen_socket, &readset);      //adding a listening socket to readset

/*use for timeout*/
timeval blocktime;
blocktime.tv_sec=0;
blocktime.tv_usec=0;

现在,当前值显示listen_socket已添加到readset:
readset.fd_count = 1
readset.fd_array[0] = 116

此指令出现问题:



我期望select()将返回值1,因为我在readset中添加了一个监听套接字。相反,select()返回0,而readset.fd_count的值减1。

新值是:



我找不到这里发生的事情。我正在Windows 7上编程。任何帮助将不胜感激!

最佳答案

Read the documentationselect()更新提供的fd_set记录,以指示哪个套接字满足请求的状态。返回值> 0表示满足一个或多个套接字,0表示发生超时,并且在指定的超时时间内未满足任何套接字,而-1表示错误。您使用的超时值为0,因此如果套接字无法立即读取,则读取的fd_set将被清除。

顺便说一句,在Windows上不使用select()的第一个参数,应将其设置为0。

09-30 14:49