【发布时间】:2011-06-01 14:30:51
【问题描述】:
我在 Unix 中使用 select 函数时遇到问题。
我有一个等待连接的服务器。首先,我使用FD_SET(listener, readfds) 将监听套接字文件描述符listener 添加到fd_set readfds,然后在select() 中使用它。
当我获得连接时,我调用accept() 并使用接受的文件描述符在选择中设置readfds 并开始接收来自连接的数据。但是,当我在 strace 中检查代码时,选择不会在 readfds 中显示侦听器,而 select() 正在第二次执行。
在再次调用select() 之前,是否需要再次使用FD_SET(listener, readfds) 设置侦听器文件描述符?
谢谢。
【问题讨论】:
-
在 Linux 上也不能修改超时值,因此也需要重新初始化。该标准允许这样做,但在其他风格的 unix 中并不常见。