accept阻塞挡不住

文章出处:http://hi.baidu.com/1kbyte/blog/item/46b2fc2238b765599822ed00.html

 

写过socket的朋友们一定都有过这样的经历:程序想退出的时候,却发现被accept阻塞着,此时,想退出程序只能强行杀死。多进程多线程的时候这个问题尤其严重,曾经在网上查了很多资料,也没有人给个好的解决方法,只有用select实行非阻塞模式,直到今天,这个问题终于找到了一个完美的解决方案(非select,socket阻塞模式时,linux下编程已测)。简单说说我的实现方式吧:信号+longjmp。伪代码如下:

只需要在代码上稍作修改,就可以实现退出阻塞模式的accept了。想退出此程序时,只需要向该程序发送一个SIGIO的信号即可了^_^。

简单说下原理吧,这个是使用了SIGIO可打断阻塞程序的原理,跳出accept阻塞,又利用了longjmp可以跳出函数的原理,彻底摆脱accept的束缚,很简单,不知道当初为啥一直没想到,受了accept多年的折磨。windows下应该也会有相应的消息+跳转机制与之对应,我不太熟,就不给举例子了。感兴趣的可以试试我这个方法,我目前只在linux下试过,不知道unix和其他类unix系统是否好用,仅希望此文能能抛砖引玉,让大家有更好更方便的方案发出来给大家分享一下。

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值