2
我一直在阅读的手册页中选择(从差异源)似乎并不能得到直接的解释。添加了相同的套接字fd两次FD_SET然后调用选择
可以说我有这样一个已经连接的套接字:
s1 = socket(...);
connect(s1, ...)...
现在可以说,我添加了插座2倍(例如:误),以相同的fd_set像这样:
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(s1, &readfds);
....
FD_SET(s1, &readfds);
现在我致电select:
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
.....
}
如果数据是从套接字发送的,将选择是否已将FD设置为就绪或onl Ÿ我添加的第一个?
不,将相同的套接字多次设置为相同的读取集合不会导致任何问题。可以将S1视为readfds中的索引。 – Mazhar
套接字号的列表是作为(在当前场景中)'readfds'数据结构中的位图实现的,多次设置相同的位会导致对FDSET()的调用没有进一步的效果,除了第一个调用该特定的套接字号码 – user3629249