0
當select返回filw描述符已更改時,如何只從哪個套接字讀取數據?當FD改變時,即使FD在緩衝區中沒有數據,printf語句也會執行。如何僅從已更改的文件描述符中讀取
編輯:我正在閱讀的問題一直在閱讀,儘管我沒有發送任何數據。我使用1個套接字發送接收。
void receive(struct nodeData *nd, struct sockInfo *si){
char buffer[MAXBUF];
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 1000;
// ----Wait in select until file descriptors change----
int y = select(si->maxFD, &si->fd_read_set, NULL, NULL, &timeout);
if (y <= 0)
return;
for (int i=0; i < nd->netTopo->n; i++) {
/* ----Was it child i---- */
if (FD_ISSET(si->mastFD[i], &si->fd_read_set)) {
read(si->mastFD[i], buffer, MAXBUF);
printf("%d %d %d \n",buffer[0], buffer[1], buffer[2]);
}
}
}
如果讀取返回'> 0',那麼一些數據就在那裏。你爲什麼認爲「沒有數據」?順便說一句,你必須存儲'read'返回的值,如果它小於3,那麼你的代碼正在讀垃圾。 – Mat
@Mat小於3?咦? –
爲了測試我只向1個套接字發送數據,並且打印語句多次打印出來,但是如果有意義的話它不打印任何東西。 – Donatello