【问题标题】:When data is sent over a Socket, when does send/write returns -1?当通过 Socket 发送数据时,send/write 什么时候返回 -1?
【发布时间】:2010-11-11 00:15:32
【问题描述】:

Linux。 Tcp 套接字。

send()/write() 命令何时失败?

是否只有在内核中的 TCP 发送缓冲区溢出时才返回 -1?

【问题讨论】:

  • -1 在程序和编程中通常表示运行时错误。

标签: c linux sockets tcp


【解决方案1】:

来自OpenGroup write() 的定义:

成功完成后,write() [XSI] 和 pwrite() 应返回 实际写入的字节数 与 fildes 关联的文件。这 数字永远不会大于 字节。否则返回-1 并设置 errno 以指示错误。

send() 也是一样的——OpenGroup 页面用于 send()

您将通过查看 errno 找到更多信息。有关更多信息,请参阅 errno 上的 OpenGroup 页面。

【讨论】:

  • 这里什么是成功完成?将数据写入内核缓冲区还是 TCP 从远程端接收到数据的 ack?
  • 成功写入内核缓冲区。
  • @Blacklabel - 来自 send() 页面:“成功完成对 send() 的调用并不能保证消息的传递。返回值 -1 仅表示本地检测到的错误。”
【解决方案2】:

到您的具体点 - 如果您的 write 调用是 blocking,(默认情况下),溢出只会 block 你,直到有可用的缓冲区空间。

如果写入调用是非阻塞,并且缓冲区已满,您将收到错误消息。

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2012-01-24
    • 2011-04-18
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多