簡體   English   中英

什么條件導致NetworkStream.Write阻塞?

[英]What conditions cause NetworkStream.Write to block?

NetworkStream.Write只會阻塞它將數據發送到TCP發送緩沖區,還是會阻塞,直到接收主機實際確認數據為止?

注意:套接字配置為阻止I / O.

編輯:哎呀,當然沒有TcpClient.Write這樣的東西! 我們都明白我們在談論TcpClient.GetStream().Write ,實際上是NetworkStream.Write

除非.net使用的不是winsock,否則根據winsock參考:

成功完成發送功能並不表示數據已成功發送並接收到收件人。 此功能僅表示數據已成功發送。

如果傳輸系統中沒有可用的緩沖區空間來保存要傳輸的數據,則發送將阻止,除非套接字已置於非阻塞模式。 在非阻塞流定向套接字上,寫入的字節數可以在1和請求的長度之間,具體取決於客戶端和服務器計算機上的緩沖區可用性。

假設write在下面調用send,那么對winsock文檔的嚴格解釋將表明沒有保證數據在返回時將數據傳遞到管道的另一端。

以下是我引用的winsock文檔的鏈接: http//msdn.microsoft.com/en-us/library/windows/desktop/ms741416( v = VS.85) .aspx

我不同意這兩個答案[說明它阻止]。 寫入TCP / IP套接字不會阻止,除非底層緩沖區已經充滿了未確認數據。 通常,它不會阻塞,而只是傳遞給TCP實現。 但是當然現在我必須追蹤一些參考來支持這個:)

來自SO

TcpClient.Write將阻塞,直到數據包緩沖區已刷新到網絡並且已收到相應的ACK。 您會注意到,斷開的連接通常最終會在Write操作上拋出異常,因為它等待ACK但在定義的超時時間內沒有得到ACK。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM