还没有笔记
选中页面文字后点击「高亮」按钮添加
COMS W3157
Borowski 博士
哥伦比亚大学

服务器关闭客户端套接字之后…
| 客户端 1 | 服务器 | | 客户端 2 |
| :--- | :--- | :--- | :--- |
| 调用 connect 返回 connect | | 调用 accept | 调用 connect
客户端 2 阻塞等待完成其连接请求,直到午饭后! |
| 调用 fgets | | 调用 read | |
| 用户去吃午饭 | 服务器阻塞等待客户端 1 的数据 | | |
| 客户端 1 阻塞等待用户输入数据 | | | |
| 如 D. Murray, R. Bryant, and G. Langale 15-441/213 幻灯片所示 | | | |

摘自 D. Murray, R. Bryant, and G. Langale 15-441/213 幻灯片
线程
使用 select()
监视文件描述符,直到达到 FD_SETSIZE (1024) 的数字
注意:对于许多现代应用程序来说,这是一个“不合理”的低限制,而且这个限制不会改变。但是,它对于本课程中的应用程序来说是完全可以接受的!如果你需要更高的限制,请考虑使用 poll ( )。
它是如何工作的?
```c
int select(int nfds,
fd_set *readfds,
fd_set *writefds,
fd_set *exceptfds,
const struct timespec *timeout);
```
```c
void FD_ZERO(fd_set *fdset);
clear out all bits
void FD_SET(int fd, fd_set *fdset);
set one bit
void FD_CLR(int fd, fd_set *fdset);
clear one bit
int FD_ISSET(int fd, fd_set *fdset);
test whether fd bit is set
```