c - 发送功能如何工作

标签 c sockets network-programming send

我正在使用 size_t send(int sockfd, const void *buf, size_t len, int flags); 来自 socket.h 文件。我对此有些怀疑。

疑问1:如果假设我传递给send的字符串的长度是10,而我在第三个参数中指定的长度是15。那么 send 将只发送 10 个字符或者发送 15 个字符(它通过读取最后 5 个字符的未分配内存获得)。
如果第二个参数的长度大于第三个参数,在相反的情况下会发生什么。

疑问2:我假设第二个参数的长度等于第三个参数。现在,如果第二个参数是 - "abc\0def\0qw"。它的长度是 11。将 send 发送整个字符串或 \0 有任何效果。我认为它会发送整个字符串。 send 是如何工作的。

如果有人知道关于sendrecv 的任何好的资源,其中深入讨论了这些功能,请分享。

最佳答案

  • send 函数将尝试按照您告诉它的方式发送。如果缓冲区足够大,则不会发生任何特殊情况。如果不是,则未定义会发生什么:它可能会发送垃圾,可能会崩溃,或者它可能会做任何其他事情

  • send 函数不关心缓冲区内容 - 它只关心要写入的指定字节数

关于c - 发送功能如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412329/

相关文章:

C 中的 char[] 操作

c - C 中链表上​​的双指针

scala - 如何使用akka在scala中打开与TLS的TCP连接

python - ValueError:使用套接字和 ssl 模块时 check_hostname 需要 server_hostname

linux - 在 Linux 集群中跨机器共享大型映射数据文件

python - 使用 POX 创建 TCP 数据包

C - 使用 StdIn 和 StdOut 通过逐位过程进行一次性密码本加密

c - 检测控制故障

python - 如何手动关闭BaseHTTPServer中的连接?

java - 如何在 Java 中进行隐形 ssl 握手