【发布时间】:2015-03-01 09:54:48
【问题描述】:
调用发送函数时,如果整个消息的套接字缓冲区没有空间,则将存储与空间一样多的字节,并返回该数量。 如果根本没有空间,函数将阻塞,直到至少有 1 字节可用空间,存储它并返回存储量。
以上句子都是真的吗?
是否存在send会返回0字节的情况?(设置了SNDTIMEO且超时的情况除外)
【问题讨论】:
标签: sockets network-programming winsock
调用发送函数时,如果整个消息的套接字缓冲区没有空间,则将存储与空间一样多的字节,并返回该数量。 如果根本没有空间,函数将阻塞,直到至少有 1 字节可用空间,存储它并返回存储量。
以上句子都是真的吗?
是否存在send会返回0字节的情况?(设置了SNDTIMEO且超时的情况除外)
【问题讨论】:
标签: sockets network-programming winsock
调用发送函数时,如果整个消息的套接字缓冲区没有空间,则将存储与空间一样多的字节,并返回该数量。如果根本没有空间,函数将阻塞,直到至少有 1 字节可用空间,存储它并返回存储量。
以上句子都是真的吗?
没有。几年前在 news:comp.protocols.tcp-ip 上对此进行了讨论,所有实现者都聚集在这里,并且一致认为 Posix 不仅要求它不能返回零,而且不能返回小于length 参数的值,处于阻塞模式。
是否存在send会返回0字节的情况?(设置了SNDTIMEO且时间到期的情况除外)
是的,当且仅当提供的length 参数为零。
注意,如果 SO_SNDTIMEO 设置为非零值并且超时到期,send() 将不会返回零:如果没有传输任何字节,它将返回 -1,errno 等于 EAGAIN/EWOULBLOCK,。
【讨论】: