linux send函数的一个参数理解

         一个简单的client、server代码测试数据传输。当建立连接后,client发送数据给server后,server接着发送数据给client。

 连接断开后,即client断开或退出时,server若继续向client发送数据,则程序会异常退出。之所以异常退出,是因为此时进程向系统发送了一个SIGPIPE信号。要想验证下,可以设置send函数第三个参数为MSG_NOSIGNAL,即要求进程不把信号SIGPIPE发送给系统,而输出到终端。

     至于如果解决这个办法,可以在进程里截获此信号,具体做法是设置信号处理函数、然后将其注册到系统即可。

通过此方法解决这个问题,一定不能忘了send的第四个参数,不能将其设置为MSG_NOSIGNAL,因为设置成MSG_NOSIGNAL后,进程就不把信号发送给系统了,我们也就截获不到了!

 

函数原型:

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

flags:

        MSG_NOSIGNAL (since Linux 2.2)

              Requests not to send SIGPIPE on errors on stream oriented sockets when the other end breaks the

              connection.  The EPIPE  error  is  still  returned.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值