0
在Linux或Windows socket编程Socket编程的send()的返回值
我知道读返回一个值,表示 成功接收的字节数数。
该返回值可能会小于请求的长度。 (即,读(SD,BUF,100)可能返回50,如果接收缓冲器 仅具有50个字节)
是有可能,
send(sd, buf, 100);
返回1〜99之间的值Δα 如果是,现在是什么情况? 我想知道具体的例子情况。
预先感谢您
在Linux或Windows socket编程Socket编程的send()的返回值
我知道读返回一个值,表示 成功接收的字节数数。
该返回值可能会小于请求的长度。 (即,读(SD,BUF,100)可能返回50,如果接收缓冲器 仅具有50个字节)
是有可能,
send(sd, buf, 100);
返回1〜99之间的值Δα 如果是,现在是什么情况? 我想知道具体的例子情况。
预先感谢您
见man
页面,或者如果你正在谈论的Winsock,为官方指定的MSDN文档。
在实践,send()
阻塞模式发送的所有数据,无论文件说什么,除非有一个错误,在这种情况下没有被发送。
在非阻塞模式下,它将发送任何适合套接字发送缓冲区的数据,并在大于0时返回该长度。如果套接字发送缓冲区已满,则返回-1,其中errno = EWOULDBLOCK/EAGAIN
。
谢谢你,这正是我所设想的。你确认了,谢谢 – daehee
我还没有测试过,但我想如果你通过阻塞I/O发送非常大的缓冲区(例如每个send()调用超过65KB),那么发送( )发送部分数据,然后遇到错误(例如远程对等关闭连接)。在这种情况下,我认为send()行为唯一有用的方法是返回发送的字节数,这将小于缓冲区大小。这在实践中并不经常发生,因为大多数程序不会在一次调用中发送太多数据。 –
@JeremyFriesner根据规格是可能的。实际上,它不会发生,也不是因为“大多数程序不会尝试发送太多数据”,而是因为这是'send()'在所有内核中实现的方式。 – EJP