天天看點

《UNIX網絡程式設計 卷1:套接字聯網API(第3版)》——8.7 資料報的丢失

本節書摘來自異步社群《unix網絡程式設計 卷1:套接字聯網api(第3版)》一書中的第8章,第8.7節,作者:【美】w. richard stevens , bill fenner , andrew m. rudoff著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

我們的udp客戶/伺服器例子是不可靠的。如果一個客戶資料報丢失(譬如說,被客戶主機與伺服器主機之間的某個路由器丢棄),客戶将永遠阻塞于dg_cli函數中的recvfrom調用,等待一個永遠不會到達的伺服器應答。類似地,如果客戶資料報到達伺服器,但是伺服器的應答丢失了,客戶也将永遠阻塞于recvfrom調用。防止這樣永久阻塞的一般方法是給客戶的recvfrom調用設定一個逾時。我們将在14.2節繼續讨論這一點。

僅僅給recvfrom調用設定逾時并不是完整的解決辦法。舉例來說,如果确實逾時了,我們将無從判定逾時原因是我們的資料報沒有到達伺服器,還是伺服器的應答沒有回到客戶。如果客戶的請求是“從賬戶a往賬戶b轉一定數目的錢”而不是我們的簡單回射伺服器例子,那麼請求丢失和應答丢失是極不相同的。我們将在22.5節具體讨論如何給udp客戶/伺服器程式增加可靠性。

繼續閱讀