我有一個關於將新的套接字文件描述符添加到FDSET的問題。比方說,我們已經連接到插座S1:將新的FD添加到fd_Set,同時阻止選擇
fd_set readfds;
//s1 = socket(...);
//connect(s1, ...)...
FD_ZERO(&readfds);
FD_SET(s1, &readfds);
,我們正在等待數據回落插座,通過調用選擇中的一個線索:
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集,鑑於選擇阻塞,我應該如何繼續?我怎麼能打斷選擇
是添加一個零超時和使用選擇像輪詢的技巧?