ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len);
在上面的sendto()
概要中,第三个字段表示length
,理想情况下是发送的消息
的大小(以字节为单位)。
如果length
字段错误并且不等于message
的大小怎么办?
sendto()
能否成功发送仅提到的长度字节。如果是,如果长度大于实际有效的消息
大小,会发生什么情况。
最佳答案
sendto()
没有用于消息的缓冲区类型的概念。它只知道您提供的参数值,因此您有责任确保它们准确。
如果length
小于实际消息,则UDP发送length
字节数,最多发送length
字节对于 TCP。
如果长度
大于实际消息,则行为未定义。充其量,您可能会从周围的内存中发送随机数据。更糟糕的是,当您尝试从无效内存发送字节时,您的代码将会崩溃。
关于c - 调用 sendto() 时长度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852003/