我正在使用ssize_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
的任何好消息来源,recv
深入讨论这些功能请分享。
答案 0 :(得分:2)
函数send
将尝试发送与您告诉它完全相同的内容。如果缓冲区足够大,则不会发生任何特殊情况。如果不是,那么发生的事情没有定义:它可能发送垃圾或者它可能会崩溃或者它可以做任何其他事情
函数send
不关心缓冲区内容 - 它只关心要写入的指定字节数
答案 1 :(得分:1)
send
对NUL终止的字符串一无所知(参数类型中有线索 - 它需要void*
而不是char*
。)
它只是从你给它的地址发送你给它的字节数。如果这意味着读取未分配的内存,那就是它会做什么,可能会在此过程中崩溃。
答案 2 :(得分:1)
send
函数对“字符串”一无所知。如果你给它一个指针,并告诉它在该指针之后发送接下来的15个字节,那么它将完全它将尝试做什么。 (如果你给它一个不合适的len
值,你可能会遇到 Seg-Fault 或类似的东西。
没有理由认为它会因为找到一个值为0x00
的字节而停止。毕竟,许多网络协议都被0x00
填满了所有地方。每次碰巧找到该值时,都不能让send
停止。