recv函数异常处理
来源:互联网 发布:linux修改内核参数 编辑:程序博客网 时间:2024/05/24 15:42
网络模型:
通信进程为一个常驻内存进程,监听客户端的请求,当到达一个请求后,fork出一个子进程,做具体业务处理。
此时服务端对于recv函数的处理一般会是
sigset(SIGALARM, TimeOut);
alarm(time_out)
while(recv(...)<=0){
if(errno == EINTR)
continue;
else
return/break;
}
如果我们在TimeOut函数里面没有直接调用exit
,而此时服务端的recv又不断获得error==ENITR,则子进程会一直会在recv和中断信号处陷入死循环,子进程不会退出,可能会造成占用过高的CPU(比如父进程超时后后,然后客户端退出,此时子进程就会不断获得error==EINTR)
解决方法:
1.在超时处理函数中直接调用exit,这样的话子进程的套接字不能及时的close(可以使用setjmp保存堆栈信息,同时在超时处理函数中使用longjmp跳回到保存的堆栈信息关闭套接字);
2.在while处增加循环次数的判断,比如超过5次子进程退出。
0 0
- recv函数异常处理
- recv函数
- recv函数
- recv函数
- recv函数
- recv函数返回值的处理和判断
- php异常处理函数
- _set_invalid_parameter_handler异常处理函数
- win32异常处理函数
- signal函数异常处理
- _set_invalid_parameter_handler异常处理函数
- 异常处理函数set_exception_handler
- send函数 & recv函数
- recv send处理
- send recv函数
- 转:send recv函数
- send和recv函数
- TCP --recv函数相关
- 机器学习研究项目--以机器视觉工程师的视角(MLP篇)
- 微信语音点歌系统
- 百度地图初学三:百度地图开发遇到的问题
- 岁月的剪影【三月dayday欢乐】
- NoSQL数据库之Redis数据库管理一(Redis的介绍与安装部署)
- recv函数异常处理
- [LeetCode]132.Palindrome Partitioning II
- 控制结构程序设计2
- [LeetCode] 013. Roman to Integer (Easy) (C++/Java/Python)
- 牛顿迭代法求平方根(c++代码)
- 黑马程序员——Java基础---IO
- SSMS局域网登录提示“该登录名来自不受信任的域不能与Windows身份验证一起使用。错误18452“解决办法
- 控制结构程序设计3
- centos单机安装Hadoop2.6