【发布时间】:2015-04-02 05:12:48
【问题描述】:
在
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout);
readfds & writefds - 它们可以同时使用吗?例如:如果我一个接一个地进行读取操作和发送操作
另外,谁能提供一个好的链接或示例程序?
select(...) 是否仅用于服务器程序?还是只在 TCP 中?
【问题讨论】:
-
我不明白“同时”。如果这就是您的意思,您可以同时在套接字上选择可读性和可写性,但您不需要等待可写性来写任何东西。您应该只写,并使用 select 的可写性部分来处理
send()返回 -1 和errno = EAGAIN/EWOULDBLOCK.的偶尔情况 -
这就是我想知道的。我尝试在我的程序中使用它,但没有得到想要的程序。然后我浏览了网上的一些程序,其中一些字段设置为 NULL。所以我开始想知道是否必须为接收和发送操作分别调用 select(),其他字段设置为 NULL,即 writefds 用于发送,readfds 用于接收
-
另外,我还有一个问题,在这个站点cse.sc.edu/~wyxu/515Fall08/slides/select.pdf 上,有人提到 select() 将提供以下功能:当集合 {1,4,5} 中的任何描述符时返回准备好读取 集合 {2,7} 中的任何描述符都准备好写入 集合 {1,4} 中的任何描述符都有一个异常条件未决。
-
这意味着什么?从某种意义上说,这个集合代表什么?如果是一组描述符,那么数字是如何分配的?如果没有怎么办。描述符小于 7? .摘自第三张纸的第五张幻灯片
标签: sockets tcp server system-calls