如何写入/发送特定数量的字节到一个套接字完全但不是部分?

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

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()的确认返回本身是不够的。