Linux socket 读写接口返回值分析

首先说明:recv()/send(),recvfrom()/sendto(),recvmst()/sendmsg()最终系统入口是sock_sendmsg()/sock_recvmsg()。他们的返回值是统一的。

对于sock_sendmsg()/sock_recvmsg(),不同的family具备各自的实现总结如下:

对于读

返回值的优先级: 

return copied?:err;  

如果读/写的字节数copied>0,则必返回copied。否则(copied==0)返回err,其中,如果err!=0,表示遇到了错误。否则err=0,对端关闭了套接字

读:

     阻塞                                <0                                                                                                0                                                                    0<&<n

                      EINT(阻塞过程被唤起&&非超时&&copied==0)            copied==0, 对端socket关闭 (FIN,即EOF)             copied>0 , errno中可以找到<n的原因

                      EAGAIN(阻塞过程被唤起&&超时了&&copied==0)

    非阻塞          

                     EAGAIN(阻塞过程被唤起&&超时了&&copied==0)      copied==0, 对端socket关闭 (FIN,即EOF)               copied>0 , errno中可以找到<n的原因


对于写

返回值的优先级: 

return sent?:err;  

写:

     阻塞                                <0                                                                                                0                                                                    0<&<n

                      EINT(阻塞过程被唤起&&非超时&&sent==0)                                              ?                                         sent>0 , errno中可以找到<n的原因

                      EAGAIN(阻塞过程被唤起&&超时了&&sent==0)

                     EPIPE(本端关闭了套接字)

    非阻塞          

                     EAGAIN(阻塞过程被唤起&&超时了&&sent==0)                                            ?                                           sent>0 , errno中可以找到<n的原因

                     EPIPE(本端关闭了套接字)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值