免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6569 | 回复: 11
打印 上一主题 下一主题

[函数] 关于在线程里调用recvfrom并用alarm()中断的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-17 16:05 |只看该作者 |倒序浏览
最近写代码时遇到了一个问题.

网络代码,我创建一个线程调用recvfrom来接收,并设置alarm来防止阻塞太久,
发现alarm信号并不能中断recvfrom,发生alarm信号并可以接收并处理,但是recvfrom
却依然阻塞,这是不是因为recvfrom是可重入的,所以产生中断后,系统会自动恢复进程的寄存器内容,然后继续向下运行???

论坛徽章:
0
2 [报告]
发表于 2009-02-17 16:36 |只看该作者
是不是信号中断recvfrom了之后,自动重新执行了recvfrom呢
你检查一下automatic restart of interrupted system calls  这个标志有没有设置呢

论坛徽章:
0
3 [报告]
发表于 2009-02-17 16:41 |只看该作者
放着SOCKET的超时不用,搞信号。。。。

论坛徽章:
0
4 [报告]
发表于 2009-02-17 16:42 |只看该作者

回复 #2 zhuhefang2006 的帖子

谢谢 zhuhefang2006先。。
我是参考了UNP的例子的,它的例子在我机上可以中断,只不过它没有建立线程,是在主线程中调用的,我先看看你提示的。

论坛徽章:
0
5 [报告]
发表于 2009-02-17 16:44 |只看该作者

回复 #3 alexhappy 的帖子

但是SOCKET的超时是固定的,有时候我并不想等那么久。。。

论坛徽章:
0
6 [报告]
发表于 2009-02-17 16:55 |只看该作者
原帖由 zhuhefang2006 于 2009-2-17 16:36 发表
是不是信号中断recvfrom了之后,自动重新执行了recvfrom呢
你检查一下automatic restart of interrupted system calls  这个标志有没有设置呢


-_-, 能不能教教我怎么检查,我是超级菜鸟,请大牛见谅。。。

论坛徽章:
0
7 [报告]
发表于 2009-02-17 17:08 |只看该作者
你注册SIG_ALRM信号处理函数的代码贴出来看一下
是用的sigaction还是signal?

论坛徽章:
0
8 [报告]
发表于 2009-02-17 17:12 |只看该作者
原帖由 wolf711988 于 2009-2-17 16:42 发表
谢谢 zhuhefang2006先。。
我是参考了UNP的例子的,它的例子在我机上可以中断,只不过它没有建立线程,是在主线程中调用的


你的意思是书上的例子,直接调用可以正常中断你的recvfrom系统调用,而在线程中调用recvfrom就不能中断
是这个意思吗
我对线程不了解,所以我的回答可能对你描述的问题没什么用

论坛徽章:
0
9 [报告]
发表于 2009-02-17 17:17 |只看该作者
原帖由 zhuhefang2006 于 2009-2-17 17:08 发表
你注册SIG_ALRM信号处理函数的代码贴出来看一下
是用的sigaction还是signal?


我是用sigaction,的确我设置了SA_RESTART标志,因为我直接拿UNP的函数来用,回去看了一下才发现。
奇怪的是UNP的例子在我机上是可以被中断的,它也是设置了SA_RESTART标志的。而我在线程里则不能中断。

论坛徽章:
0
10 [报告]
发表于 2009-02-17 17:17 |只看该作者
原帖由 zhuhefang2006 于 2009-2-17 17:12 发表


你的意思是书上的例子,直接调用可以正常中断你的recvfrom系统调用,而在线程中调用recvfrom就不能中断
是这个意思吗
我对线程不了解,所以我的回答可能对你描述的问题没什么用


是的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP