套接字编程 send() 返回值

dae*_*hee 3 sockets linux networking

在linux下,或者windows socket编程

我知道 read 返回一个值,该值指示成功接收的字节数。

此返回值可能小于请求的长度。(即,如果接收缓冲区只有 50 个字节,则 read(sd, buf, 100) 可能返回 50)

有没有可能

send(sd, buf, 100);
Run Code Online (Sandbox Code Playgroud)

返回一个 1~99 之间的值??如果是,是什么场合?我想知道具体的例子情况。

先感谢您

use*_*421 5

有关man官方规范,请参阅页面或 MSDN 文档(如果您正在谈论 Winsock)。

实践中, send()在阻塞模式下发送所有数据,不管文档说了什么,除非有错误,在这种情况下什么都不发送。

在非阻塞模式下,它发送适合套接字发送缓冲区的任何内容,并在 > 0 时返回该长度。如果套接字发送缓冲区已满,则返回 -1 并带有 errno = EWOULDBLOCK/EAGAIN

  • @JeremyFriesner 根据规范这是可能的。实际上,这种情况不会发生,并不是因为“大多数程序不会尝试发送这么多数据”,而是因为这就是所有内核中实现“send()”的方式。 (2认同)