c - 调用 sendto() 时长度错误

标签 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()概要中,第三个字段表示length,理想情况下是发送的消息的大小(以字节为单位)。

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

sendto() 能否成功发送仅提到的长度字节。如果是,如果长度大于实际有效的消息大小,会发生什么情况。

最佳答案

sendto() 没有用于消息的缓冲区类型的概念。它只知道您提供的参数值,因此您有责任确保它们准确。

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

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

关于c - 调用 sendto() 时长度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852003/

相关文章:

如果在 VPN 上广播,C sendto 返回 -1

python - 在 ipv6 的 sendto 中作为 "address"传递的到底是什么

c++ - 当前是否有任何包含众所周知的压缩算法的 C/C++ 库?

linux - 如何在 Linux 上启用(禁用)PPTP 多登录(同一帐户)?

c - C 中的 UDP 服务器/客户端 - 发送到错误 : Address family not supported by protocol

linux - 我正在尝试在 Linux 服务器上安装编译器

linux - 如何在Apache服务器上正确使用域名托管网页?

C - 第一次 recv() 调用后的 "Transport endpoint is not connected"

c - 如何初始化和打印二维字符数组?

无法理解此 C 代码片段中 (b&1) 的含义