簡體   English   中英

如何將特定數量的字節寫入/發送到套接字完全但不是部分?

[英]how to write/send a specific number of bytes to a socket totally but not partially?

我想給套接字寫一個特定的字節數,

n=write(sock_fd, buf, len);

如果n<len ,我寧願沒有字節寫入套接字,是否可能? 謝謝!

  1. 如果您正在使用阻止模式,則永遠不會出現這種情況:send()將阻塞,直到所有數據都已發送。 這不是文檔讀取的方式,但它是所有已知實現的行為方式。
  2. 如果你在談論TCP,它無論如何都沒有任何區別:它是一個字節 - 蒸汽協議,而不是數據報協議。
  3. 如果你在談論UDP,它已經在非阻塞,頌歌和阻塞模式中表現為那樣,參見(1)。

如果套接字處於阻塞模式,那么,正如EJP(+1)所說, write()將不會返回,直到len字節已寫入套接字的傳出緩沖區。

但是,重要的是要注意,這並不能告訴您在連接的接收端收到了多少字節。 事實上,當write()返回時,對於len的小值,根本沒有發送任何數據。 當另一端調用read()時 ,它將阻塞,直到某些數據到達,但不一定是len字節。 如果你想讀取len字節,那么你可能必須繼續調用read()直到你得到它們。

知道實際發生了什么以及何時完成的唯一真正方法是從套接字的另一端返回某種消息,說現在一切都已到達。 來自write()的確認回報本身是不夠的。

暫無
暫無

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

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