调用错误长度的sendto()

时间:2014-09-15 15:50:00

标签: c linux sendto

ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len);

在上面的sendto()概要中,第3个字段代表length,理想情况下是以字节为单位发送的message的大小。

如果length字段错误且不等于message的大小,该怎么办?

sendto()将成功发送仅提到的长度字节。如果是,如果长度比实际有效message大小更大,会发生什么。

1 个答案:

答案 0 :(得分:1)

sendto()没有您用于邮件的缓冲区类型的概念。它只知道你给它的参数值,所以你有责任确保它们是准确的。

如果length小于实际消息,则为UDP发送length个字节数,并为TCP发送最多length个字节。

如果length大于实际消息,则行为未定义。充其量,您可能会从周围的内存中发送随机数据。更糟糕的是,当您尝试从无效内存中发送字节时,您将崩溃代码。

相关问题