在阻塞模式下可以使用BSD套接字发送函数返回0吗?

时间:2015-01-03 07:42:04

标签: sockets network-programming winsock

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

以上句子是真的吗?

是否有发送将返回0字节的情况?(除非设置了SNDTIMEO且时间到期)

1 个答案:

答案 0 :(得分:1)

  

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

     

以上句子是真的吗?

没有。几年前有一个关于这个问题的讨论:关于所有实现者收集的comp.protocols.tcp-ip,并且一致认为Posix不仅要求它不能返回零,它不能返回少于阻塞模式下length参数的值。

  

是否有发送将返回0字节的情况?(除非设置了SNDTIMEO且时间到期)

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

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