int s1, s2, n;
fd_set readfds;
struct timeval tv;
char buf1[256], buf2[256];
// 假裝我們此時已經都連線到 server 了
//s1 = socket(...);
//s2 = socket(...);
//connect(s1, ...)...
//connect(s2, ...)...
// 事先清除 set
FD_ZERO(&readfds);
// 將我們的 descriptors 新增到 set
FD_SET(s1, &readfds);
FD_SET(s2, &readfds);
// 因為 s2 是後來才取得的,所以它的數值會"比較大",所以我們用它作為 select() 中的 n 參數
n = s2 + 1;
// 在 timeout 以前會一直等待,看是否已經有資料可以接收的 socket(timeout 時間是 10.5 秒)
tv.tv_sec = 10;
tv.tv_usec = 500000;
rv = select(n, &readfds, NULL, NULL, &tv);
if (rv == -1) {
perror("select"); // select() 發生錯誤
} else if (rv == 0) {
printf("Timeout occurred! No data after 10.5 seconds.\n");
} else {
// 至少一個 descriptor(s) 有資料
if (FD_ISSET(s1, &readfds)) {
recv(s1, buf1, sizeof buf1, 0);
}
if (FD_ISSET(s2, &readfds)) {
recv(s2, buf2, sizeof buf2, 0);
}
}