send()*函数如何处理 -
ssize_t retval = send(sock, buf, SIZE_MAX, 0);
如果send成功发送SIZE_MAX字节,则返回类型不足以处理如此大的值(通常为SSIZE_MAX~ = SIZE_MAX / 2)。
在这种情况下,send()函数是否会将自身限制为仅发送SSIZE_MAX字节?
* ssize_t send(int socket, const void *buffer, size_t length, int flags);
- https://linux.die.net/man/3/send
答案 0 :(得分:1)
send
符合要求它返回成功完成时发送的字节数以及如果失败则返回-1的唯一方法是send
永远不会发送超过SSIZE_MAX
{1}}字节。当length
参数超过SSIZE_MAX
时,send
必须失败或返回的长度小于请求的长度。
答案 1 :(得分:0)
send()的长度受到底层协议处理消息的能力的限制。返回已签名以报告错误收集,因此负数是错误。因此理论上它是有限的,但是还没有传输SIZE_MAX消息的协议。
答案 2 :(得分:-1)
send()
将尝试从SIZE_MAX
指向的缓冲区发送buf
个字节。但是,SIZE_MAX
基本上表示架构的指针类型可以想象的最大值。所以它通常至少是整个地址空间的大小,如果不是更多的话。