网络编程中常见错误码总结
本文根据自身使用经验,总结以下错误码及其出现场景和一般处理流程.
网络编程的一般性流程如下 :
客户端 : socket -> connect -> write / read
服务端 : socket -> bind -> listen -> accept
还有因为设置属性带来的其它改变,比如非阻塞和套接字选项.
EADDRINUSE : 如果你在同一个端口运行了无论是相同还是不同的程序,那么bind就会出错.即便是设置了SO_REUSEADDR,同一时刻也只允许同一个进程占用指定端口,有一种极其特殊的情况,就是允许相同地址端口的完全重复绑定,但是这个特殊的情况需要传输协议支持,而且一般而言仅适用于UDP.(参考unp 7.5.11)
EINTR : 如果你并未对套接字设置非阻塞,那么所有可能阻塞的函数都有可能遇到这个错误.比如connect,accept,read,write...等,面对这个错误,一般性的处理办法是忽略掉它,继续产生这个错误的操作.比如read一个套接字,如果遇到了这个错误,忽略掉,继续read就行了.
if (errno == EINTR/* || errno == ECONNABORT*/)
{continue;
}
else
{return -1;
EAGAIN : 如果你得套接字是非阻塞的,你需要对read/write/recv/send...等函数判断返回值,如果其失败返回,并且errno是EAGAIN,这并不致命,你只要忽略它,继续处理就行,这个错误只是告诉我们,当前这个套接字并没有数据可读或者并没有空间装得下将要发送的数据.
EPERM : 这个错误码有点冷门了,我也是无意间遇到的.在编写广播程序的时候,如果采用了广播地址,却并未设置广播属性,就会出现这个errno
EPIPE : 这个错误应该是最复杂的一个错误了.我们首先需要了解的是在网络编程中的一个特殊场景.
当一个套接字已经关闭了以后,如果我们继续写这个套接字,你并不会察觉有什么异常,返回值告诉你,你写成功了,但是如果通过wireshark抓包,你会发现,接收端回复了一个RST,这个RST你根本就不知道.你唯一检测它的办法是读一下这个套接字,此时会返回0,你才发现,原来连接已经断开了.好吧,我假设我不管它,继续写,此时程序就会异常崩溃.是什么导致了程序的崩溃呢,就是SIGPIPE,这个信号的默认行为就是终止进程.
说回EPIPE,对于SIGPIPE,如果你没有捕获它,那么程序也就退出了,也就谈不上EPIPE了,所以,这个errno出现的前提一定是你设置了信号捕获.那么这个错误是否致命呢,看情况吧,反正连接也不在了,起码拿到错误以后应该close掉本端的套接字.
以上...
网络编程中常见错误码总结相关推荐
- 【Linux应用编程】Linux编程中常见错误码含义及查询方式
文章目录 1 前言 2 错误码查询 3 错误码翻译表 1 前言 linux应用程序开发过程中,经常会遇到一些错误信息的返回,存在的可能性有,参数有误.非法访问.系统资源限制.设备/文件不存在.访问 ...
- linux错误码61,Linux编程中的错误码列表
有时可以知道错误的数值,但是如果不知道对应于那个宏定义,也很难知道这个错误描述的是什么.我平时这两种方法来确定:在内核源码中搜索和查看头文件. 在内核源码中搜索一般都可以搜到,而且使用source i ...
- 网络编程中的超时检测
http://blog.163.com/liukang_0404@126/blog/static/55682581201231955735693/ 我们在网络编程中常见的一种做法是:创建好套接字后以阻 ...
- 实例解析网络编程中的另类内存泄漏
本文分享自华为云社区<[网络编程开发系列]一种网络编程中的另类内存泄漏>,作者:架构师李肯. 1 写在前面 最近在排查一个网络通讯的压测问题,最后发现跟"内存泄漏"扯上 ...
- curl返回常见错误码
关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! curl返回常见错误码 - 阿波伦 - 博客园 CURLE_OK(0) 成功. CURLE_UNSUPPORTED_PROT ...
- c语言 多个线程对同一变量执行memcpy_你可曾听过网络编程中应用线程本地存储?...
壹:你可曾听过线程本地存储? 1. 什么是线程本地存储? 线程本地存储:thread local storage(简称TLS).也叫线程特有存储:thread specific storage(简称T ...
- oracle常见错误码
oracle常见错误码总结 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ...
- 深入分析网络编程中踩过的坑
网络编程中经常会遇到一些异常的情况,定位问题需要了解协议栈的实现,以下是工作中遇到的一些常见问题的深入分析和解决思路. 问题1:server端业务进程响应心跳超时被监控进程kill,导致数据或者逻辑异 ...
- DM368开发 -- AT 指令和常见错误码
一.AT 指令 最近分析bug经常需要看radio的log, 把常见的AT命令放在这里备忘. 1. 一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令 ...
最新文章
- 原创 | 大数据时代,应让“抗疫”更科学
- 2.3.3 浮点数的加减运算与强制类型转换
- 批改网禁止粘贴怎么破_重大利好!教育部声明,要求家长批改作业等行为,发现一起严处一起...
- 一位Oracle老司机的openGauss初体验
- php小小通讯录,2009年小学信息技术优质课一等奖教学设计四上《小小通讯录》...
- HTTP/2中的二进制分帧
- 评《货币战争》:问苍茫大地谁主沉浮? 第一次转这样的帖子
- pmp考试有题库么?
- 协同过滤推荐算法总结
- java rgb565转rgb888_RGB565 与 RGB888的相互转换
- Linux | 如何通过Xshell上传文件到Linux
- 漏洞修复:Insecure Transport: HSTS not Set
- 如何快速获得城市道路智慧照明服务认证
- SpringBoot集成elasticsearch 总结
- ECMAScript6词法
- 【拍摄日志五】拍摄手法,画面构图,光影关系
- 电工基础知识-配电室安全须知
- dlink设置虚拟服务器,dlink设置虚拟服务器
- 大疆文档(8)-Android教程-模拟器App
- Cesium ClippingPlane剖切 改造 限高分析
热门文章
- JS内置对象和数组方法
- 科力锐勒索拦截系统:解决勒索病毒“勒索+窃取”双重威胁的特效药!
- Skia深入分析6——skia中图像编解码代码概述
- 江南大学计算机科学复试题目,2021江南大学计算机科学与技术考研真题经验参考书...
- 极验滑块验证码破解与研究(二):缺口图片还原
- shell脚本语法基础汇总
- karas + opencv 实现AlexNet神经网络应用于图像分类
- LaTeX编辑中文论文,公式、图表、参考文献添加超链接
- 【2022应届生的入职感悟】
- Windows10下安装Centos7系统及常见问题