1
現有程序是這樣寫爲UDP套接字(在阻塞模式下):如果有數據沒有從最後一次讀取()讀取,poll()會立即返回UDP套接字?
while (true) {
poll();
if (POLLIN is set) {
read(fd, buf, bufSize);
}
}
對於UDP,每個讀()讀取1和僅1個數據報(數據包)。如果套接字recv buf中有多個可用的數據包,則上面的代碼僅在每次讀取()時讀取1個數據包。我的問題是:下一個poll()會立即返回,因此上面的代碼仍然可以很快從套接字讀取?或者可能下一次poll()等待,直到有新的數據包到達套接字,因此代碼有效地落後於閱讀?
該文檔似乎表明,只要緩衝區中有數據,下一個poll()就會立即返回。但代碼似乎落後於閱讀,我不知道原因是在上面的代碼或其他地方。
的首選方法是可能的:
set the socket to non blocking
read in the loop until errno = EWOULDBLOCK or EAGAIN
感謝。