栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当非阻塞send()仅传输部分数据时,我们可以假定它在下一次调用时将返回EWOULDBLOCK吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当非阻塞send()仅传输部分数据时,我们可以假定它在下一次调用时将返回EWOULDBLOCK吗?

呼叫

send
有三个可能的结果:

  1. 发送缓冲区中至少有一个字节可用→
    send
    成功并返回接受的字节数(可能少于您要求的字节数)。
  2. 调用时,发送缓冲区已 完全满

    send

    →如果套接字正在阻塞,则
    send
    阻塞
    →如果套接字是非阻塞,则
    send
    失败并显示
    EWOULDBLOCK
    /
    EAGAIN

  3. 发生错误(例如,用户拉扯了网络电缆,对等方重置了连接)→

    send
    失败并出现另一个错误

如果接受的字节数

send
小于您要求的字节数,那么这意味着发送缓冲区现在已完全填满。但是,这纯粹是间接的,对于以后的任何呼叫均不具权威性
send

返回的信息
send
仅仅是您调用时当前状态的“快照”
send
。在
send
返回的时间或您
send
再次致电时,此信息可能已过时。当您的程序在内部
send
,一纳秒后或在任何其他时间,网卡可能会将数据报放在线路上-
无法知道。您将知道下一次呼叫何时成功(或何时不成功)。

换句话说,但这 并不 意味着下一次调用

send
将返回
EWOULDBLOCK
/
EAGAIN
(或者套接字未无阻塞会阻止)。尝试直到您所谓的“得到结论
EWOULDBLOCK
”才是正确的做法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409063.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号