获取套接字选项参数getsockopt原型:

#include <sys/socket.h>int getsockopt(int sockfd, int level, int option, void *optval, socklen_t optlen);

当一个socket发生错误的时候,将使用一个名为so_error的变量记录对应的错误代码,这又叫做pending error,so_error为0时表示没有错误发生。一般来说,有2种方式通知进程有socket错误发生:

1、进程阻塞在select中,有错误发生时,select将返回,并将发生错误的socket标记为可读写;

2、如果进程使用信号驱动的I/O,将会有一个SIGIO产生并发往对应进程;

此时,进程可以通过SO_ERROR取得具体的错误代码。getsockopt返回后,*optval指向的区域将存储错误代码,而so_error被设置为0。

当so_error不为0时,如果进程对socket进行read操作,若此时接收缓存中没有数据可读,则read返回-1,且errno设置为so_error,so_error置为0,否则将返回缓存中的数据而不是返回错误;如果进行write操作,将返回-1,errno置为so_error,so_error清0。

注意,这是一个只可以获取,不可以设置的选项。

linux c socket选项:SO_ERROR相关推荐

  1. Linux使用socket选项的定时器

    socket选项SO_RCVTIMEO和SO_SNDTIMEO 这个选项是专门针对socket系列的函数的,函数在下图中说明了.如果超时,就设置错误码,之后在流程中根据错误码判断是否超时. 先给出超时 ...

  2. Linux网络编程 | socket选项设定 及 网络信息API

    文章目录 读取和设置 socket 选项 SO_REUSEADDR SO_RCVBUF 和 SO_SNDBUF SO_RCVLOWAT 和 SO_SNDLOWAT SO_LINGER 选项 网络信息A ...

  3. Linux 高性能服务器编程——socket选项

    socket选项函数 功能:用来读取和设置socket文件描述符属性的方法 函数: #include <sys/scoket.h> int getsockopt ( int sockfd, ...

  4. socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF

    From: http://blog.csdn.net/jasonliuvip/article/details/22591531 最近在看<linux高性能服务器编程>,在此做个日记,以激励 ...

  5. linux Packet socket (1)简单介绍

    本文主要来自于linux自带的man packet手冊: http://man7.org/linux/man-pages/man7/packet.7.html 平时常常使用的INET套接字提供的是7层 ...

  6. linux packet socket,linux Packet socket (1)简单介绍

    本文主要来自于linux自带的man packet手冊: http://man7.org/linux/man-pages/man7/packet.7.html 平时常常使用的INET套接字提供的是7层 ...

  7. LINUX下Socket编程 函数格式详解

    你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...

  8. linux ip_tos,IP_TOS选项

    在IP头中,有一Type-of-Service字段,该字段描述了IP包的优先级和QoS选项,使用IP_TOS可以来设定该字段的值,以区分不同服务的优先级,Linux 中可以用Man 手册有ip_tos ...

  9. 提高linux上socket的性能(linux优化),提高 Linux 上 socket 性能

    使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信.与其他 API 一样,您可以通过一些方法使用 Soc ...

最新文章

  1. iOS App上架流程
  2. 节能信标组雌雄双煞 - 来自于洛阳理工学院信标组的车模
  3. 2008年上半年程序员考试试题分析
  4. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
  5. django 用户管理(1)
  6. 快给你的代码来点彩虹屁
  7. python(模块)xlwt
  8. python爬虫入门案例day06:QianTu
  9. 5G产业(一):5G超低延时噱头?
  10. 用VS软件开发“中国象棋“游戏
  11. java 小程序 自己学习
  12. 由圆上三点确定圆心和半径(附PythonMatlab程序)
  13. windwos下启动Redis或者Sentinel报错【listen:Unknown error】的原因及解决办法
  14. 企业级实战大数据课程(十)-尹成-专题视频课程
  15. 北京软件测试报告,北京PMLAB软件测试报告
  16. windows jdk1.7安装
  17. java中clone方法的理解(深拷贝、浅拷贝)
  18. 字体问题-如何判断GB2312
  19. 屏蔽TM和QQ的迷你新闻弹出窗口
  20. linux skype 接口,ubuntu /linux下skype api开发环境搭建

热门文章

  1. 工业互联网 — 5G 与 IIoT
  2. NanoPi NEO Air使用三:OverlayFS、CPU温度和频率、wifi、蓝牙、npi-config
  3. 去耦电容和旁路电容详解
  4. C语言基础学习day10
  5. 邮箱的正则表达式验证总结经验
  6. 我的微信'智障聊天助手'的设计思路
  7. php中命名空间和use
  8. [LAMP]Apache和PHP的结合
  9. 【Android】3.19 示例19--全景图HelloWorld
  10. openwrt使用3G上网卡