【问题标题】:Can send function return 0 using BSD socket in blocking mode?可以在阻塞模式下使用 BSD 套接字发送函数返回 0 吗?
【发布时间】:2015-03-01 09:54:48
【问题描述】:

调用发送函数时,如果整个消息的套接字缓冲区没有空间,则将存储与空间一样多的字节,并返回该数量。 如果根本没有空间,函数将阻塞,直到至少有 1 字节可用空间,存储它并返回存储量。

以上句子都是真的吗?

是否存在send会返回0字节的情况?(设置了SNDTIMEO且超时的情况除外)

【问题讨论】:

    标签: sockets network-programming winsock


    【解决方案1】:

    调用发送函数时,如果整个消息的套接字缓冲区没有空间,则将存储与空间一样多的字节,并返回该数量。如果根本没有空间,函数将阻塞,直到至少有 1 字节可用空间,存储它并返回存储量。

    以上句子都是真的吗?

    没有。几年前在 news:comp.protocols.tcp-ip 上对此进行了讨论,所有实现者都聚集在这里,并且一致认为 Posix 不仅要求它不能返回零,而且不能返回小于length 参数的值,处于阻塞模式。

    是否存在send会返回0字节的情况?(设置了SNDTIMEO且时间到期的情况除外)

    是的,当且仅当提供的length 参数为零。

    注意,如果 SO_SNDTIMEO 设置为非零值并且超时到期,send() 将不会返回零:如果没有传输任何字节,它将返回 -1,errno 等于 EAGAIN/EWOULBLOCK,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 2013-06-04
      • 2016-03-03
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2010-10-18
      相关资源
      最近更新 更多