【发布时间】:2017-07-18 23:48:57
【问题描述】:
我有一个关于向 FDSET 添加新套接字文件描述符的问题。假设我们已经连接到一个套接字 s1:
fd_set readfds;
//s1 = socket(...);
//connect(s1, ...)...
FD_ZERO(&readfds);
FD_SET(s1, &readfds);
我们通过在线程中调用 select 来等待数据通过套接字:
socket_reader_thread() {
for (;;)
{
int rv = select(n, &readfds, NULL, NULL, &tv);
if (rv == -1) {
perror("select"); // error occurred in select()
}
else if (rv == 0) {
printf("Timeout occurred! No data after 10.5 seconds.\n");
}
else {
// one the descriptors have data
.....
}
}
}
如果我现在想在 readfds 集中添加另一个套接字(或者可能是另外两个套接字等),考虑到 select 是阻塞的,我应该如何继续?如何中断选择
添加零超时并像 poll 一样使用 select 的诀窍是什么?
【问题讨论】:
标签: c sockets select networking