呼叫
send有三个可能的结果:
- 发送缓冲区中至少有一个字节可用→
send
成功并返回接受的字节数(可能少于您要求的字节数)。 调用时,发送缓冲区已 完全满
send
。
→如果套接字正在阻塞,则send
阻塞
→如果套接字是非阻塞,则send
失败并显示EWOULDBLOCK
/EAGAIN
发生错误(例如,用户拉扯了网络电缆,对等方重置了连接)→
send
失败并出现另一个错误
如果接受的字节数
send小于您要求的字节数,那么这意味着发送缓冲区现在已完全填满。但是,这纯粹是间接的,对于以后的任何呼叫均不具权威性
send。
返回的信息
send仅仅是您调用时当前状态的“快照”
send。在
send返回的时间或您
send再次致电时,此信息可能已过时。当您的程序在内部
send,一纳秒后或在任何其他时间,网卡可能会将数据报放在线路上-
无法知道。您将知道下一次呼叫何时成功(或何时不成功)。
换句话说,但这 并不 意味着下一次调用
send将返回
EWOULDBLOCK/
EAGAIN(或者套接字未无阻塞会阻止)。尝试直到您所谓的“得到结论
EWOULDBLOCK”才是正确的做法。



