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