繁体   English   中英

套接字选择可减少文件描述符集中的套接字数量

[英]Socket select reducing the number of sockets in file descriptor set

我有一段代码接受2个连接,用各自的套接字创建一个文件描述符集,并将其传递给select。 但是,当select返回时,文件描述符集中的文件描述符数量减少为1,而select可以仅检测fd_array数组中第一个套接字的接收数据。

有什么想法我应该看的吗?

提前致谢,

安德烈

fd_set mSockets;

/* At this point

mSockets.fd_count = 2
mSockets.fd_array[0] = 3765
mSockets.fd_array[1] = 2436

*/

select(0, & mSockets, 0, 0, 0);

/* At this point

mSockets.fd_count = 1
mSockets.fd_array[0] = 3765
mSockets.fd_array[1] = 2436

*/

也就是说,选择功能的readfds,writefds和exceptfds参数是输入/输出参数。

您应该在每次调用之前初始化fd_set来选择:

SOCKET s1;
SOCKET s2;

// open sockets s1 and s2

// prepare select call    
FD_ZERO(&mSockets);
FD_SET(s1, &mSockets);
FD_SET(s2, &mSockets);

select(0, &mSockets, 0, 0, 0);

// evaluate select results
if (FD_ISSET(s1, &mSockets))
{
    // process s1 traffic
}


if (FD_ISSET(s2, &mSockets))
{
    // process s2 traffic
}

另外,cou可以检查select的返回值。 如果您完全可以使用插座操作,则表示无效。 即返回零表示所有FD_ISSET amcro将返回0。

编辑:

由于readfds,writefds和exceptfds也了选择功能paramters,他们被修改。 fd_count成员指示有效的fd_array成员数。 如果fd_count小于2,则不应评估fd_array[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM