c-调用长度错误的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大小相比,如果长度更大,会发生什么。

sendto()不知道您为消息使用的缓冲区类型。它只知道你给它的参数值,所以你有责任确保它们是准确的。

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

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

最新更新