linux c socket选项:SO_ERROR
获取套接字选项参数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相关推荐
- Linux使用socket选项的定时器
socket选项SO_RCVTIMEO和SO_SNDTIMEO 这个选项是专门针对socket系列的函数的,函数在下图中说明了.如果超时,就设置错误码,之后在流程中根据错误码判断是否超时. 先给出超时 ...
- Linux网络编程 | socket选项设定 及 网络信息API
文章目录 读取和设置 socket 选项 SO_REUSEADDR SO_RCVBUF 和 SO_SNDBUF SO_RCVLOWAT 和 SO_SNDLOWAT SO_LINGER 选项 网络信息A ...
- Linux 高性能服务器编程——socket选项
socket选项函数 功能:用来读取和设置socket文件描述符属性的方法 函数: #include <sys/scoket.h> int getsockopt ( int sockfd, ...
- socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF
From: http://blog.csdn.net/jasonliuvip/article/details/22591531 最近在看<linux高性能服务器编程>,在此做个日记,以激励 ...
- linux Packet socket (1)简单介绍
本文主要来自于linux自带的man packet手冊: http://man7.org/linux/man-pages/man7/packet.7.html 平时常常使用的INET套接字提供的是7层 ...
- linux packet socket,linux Packet socket (1)简单介绍
本文主要来自于linux自带的man packet手冊: http://man7.org/linux/man-pages/man7/packet.7.html 平时常常使用的INET套接字提供的是7层 ...
- LINUX下Socket编程 函数格式详解
你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...
- linux ip_tos,IP_TOS选项
在IP头中,有一Type-of-Service字段,该字段描述了IP包的优先级和QoS选项,使用IP_TOS可以来设定该字段的值,以区分不同服务的优先级,Linux 中可以用Man 手册有ip_tos ...
- 提高linux上socket的性能(linux优化),提高 Linux 上 socket 性能
使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信.与其他 API 一样,您可以通过一些方法使用 Soc ...
最新文章
- iOS App上架流程
- 节能信标组雌雄双煞 - 来自于洛阳理工学院信标组的车模
- 2008年上半年程序员考试试题分析
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
- django 用户管理(1)
- 快给你的代码来点彩虹屁
- python(模块)xlwt
- python爬虫入门案例day06:QianTu
- 5G产业(一):5G超低延时噱头?
- 用VS软件开发“中国象棋“游戏
- java 小程序 自己学习
- 由圆上三点确定圆心和半径(附PythonMatlab程序)
- windwos下启动Redis或者Sentinel报错【listen:Unknown error】的原因及解决办法
- 企业级实战大数据课程(十)-尹成-专题视频课程
- 北京软件测试报告,北京PMLAB软件测试报告
- windows jdk1.7安装
- java中clone方法的理解(深拷贝、浅拷贝)
- 字体问题-如何判断GB2312
- 屏蔽TM和QQ的迷你新闻弹出窗口
- linux skype 接口,ubuntu /linux下skype api开发环境搭建