4

我想向套接字写入特定数量的字节,

n=write(sock_fd, buf, len);

如果n<len,我宁愿没有字节被写入套接字,这可能吗?谢谢!

4

2 回答 2

3
  1. If you're using blocking mode, the condition can never arise: send() will block until all the data has been sent. This is not the way the documentation reads, but it's how all known implementations behave.
  2. If you're talking about TCP, it doesn't make any difference anyway: it's a byte-steam protocol, not a datagram protocol.
  3. If you're talking about UDP, it already behaves that way in non-blocking ,ode, and for blocking mode see (1).
于 2013-06-10T22:26:11.663 回答
1

如果套接字处于阻塞模式,那么正如 EJP (+1) 所说,write()将不会返回,直到len个字节被写入套接字的传出缓冲区。

但是,重要的是要注意,这并不能告诉您在连接的接收端已接收到多少字节。事实上,当write()返回时, len的小值根本没有发送任何数据(还)。当另一端调用read()时,它将阻塞,直到一些数据到达,但不一定是len个字节。如果你想读取len个字节,那么你可能不得不继续调用read()直到你把它们全部读完。

要知道实际发生了什么以及何时完成,唯一真正的方法是从套接字的另一端返回某种消息,说明现在一切都已到达。write()的确认返回本身是不够的。

于 2013-06-10T22:38:58.603 回答