SO_ERROR 套接字选项

当一个套接字上发生错误时,内核协议中的协议模块将此套接字的名为so_error的变量设为标准的Unix Exxx值中的一个,我们称它为该套接字的待处理错误(pending error)。

内核能够以下面两种方式之一立即通知进程这个错误。

  • 如果进程阻塞在对该套接字的select调用上,那么无论是检查可读条件还是可写条件,select均返回并设置其中一个或所有两个条件。
  • 如果进程使用信号驱动式I/O模型,那就给进程或进程组产生一个SIGIO信号。

  进程然后可以通过访问SO_ERROR套接字选项获取so_error的值。由getsockopt返回的整数值就是该套接字的待处理错误。so_error随后由内核复位为0。

  当进程调用read且没有数据返回时,如果so_error为非0值,那么read返回-1且errno被置为so_error的值。so_error随后被复位为0。如果该套接字上有数据在排队等待读取,那么read返回那些数据而不是返回错误条件。

  如果在进程调用write时so_error为非0值,那么write返回-1且errno被设为so_error的值。so_error随后被复位为0。

这是我们遇到的第一个可以获取但不能设置的套接字选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值