0
我有一個用於接收和發送數據包的套接字。而僞代碼是:如何正確處理用非阻塞套接字發送/寫入?
setnonblock(fd);
add_event(event_base, recv_ev);
while("I have packets to write"){
send(fd, packet);
....
}
....
現在的問題是,由於fd是非阻塞的,在發送數據包之前發送(fd)許多返回。但我希望它可以在程序運行到下一步之前成功發送數據包,或者爲它註冊一個事件。但是,如果我爲它註冊一個事件,即使沒有可用的數據包(請注意,這些數據包不是來自僞代碼中的recv(),而是來自其他地方),可能會頻繁地觸發事件。
那麼如何處理用它?
是否有第二個項目的任何示例代碼(調用每個發送循環,直到t完成或返回零)?我不明白你的第三項(如果它返回零,然後選擇可寫性,並在它發生時繼續發送,然後停止選擇可寫性)什麼是「選擇可寫性」?謝謝 – lily
選擇可寫性是你的僞代碼已經在做什麼。 (2)的例子比比皆是。 – EJP