C -如何写入/发送特定数量的字节到套接字全部而不是部分



我想写一个特定的字节数到套接字,

n=write(sock_fd, buf, len);

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

  1. 如果你使用阻塞模式,这种情况永远不会出现:send()将阻塞直到所有数据被发送。这不是文档的阅读方式,但这是所有已知实现的行为。
  2. 如果你在谈论TCP,它没有任何区别:它是字节蒸汽协议,不是数据报协议。
  3. 如果你说的是UDP,它已经在非阻塞,ode和阻塞模式下表现出这种方式,参见(1)。

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

然而,重要的是要注意,这并没有告诉您在连接的接收端接收了多少字节。事实上,对于len的小值,当write()返回时,根本没有发送任何数据(尚未)。当另一端调用read()时,它将阻塞,直到一些数据到达,但不一定是len字节。如果你想读取len字节,那么你可能必须不断调用read(),直到你得到所有的字节。

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

最新更新