如果两个线程操作同一个Socket,一个线程recv,另一个send。这样会不会导致程序莫名其妙的退出
如果两个线程操作同一个Socket,一个线程recv,另一个send。这样会不会导致程序莫名其妙的退出 ?
我的程序莫名其妙的结束了,没有core文件,
unlimit -c unlimited也做了
现在怀疑是两个线程同时 操作socket导致
高手帮帮忙吧
问题点数:100、回复次数:8Top
1 楼bobox(波波)回复于 2006-07-04 10:06:00 得分 5
做好同步工作Top
2 楼wzzww(无知者无畏)(此人已死)回复于 2006-07-04 10:30:13 得分 5
最好不要“同时”接收发送,一般不建议把一个Socket放到2个线程中,很容易出莫名其妙的问题。
如果一定要放2个线程那是你程序设计的问题了。Top
3 楼ouygg(痞子酷)回复于 2006-07-04 10:38:33 得分 5
加锁应该没有问题。一般SEND,不要线程Top
4 楼microhard(Befree)回复于 2006-07-04 10:46:19 得分 0
为什么同时recv和send就会出现问题
而且我现在 的问题总是出现在send的那个地方
为什么 recv的地方不出问题 ?Top
5 楼linaxing(三月三)回复于 2006-07-04 10:59:31 得分 85
那就可能是你的程序被SIGPIPE中断了。即对方已经将socket关闭,你却仍然再往socket里面写数据。Top
6 楼microhard(Befree)回复于 2006-07-04 11:19:48 得分 0
to linaxing(牛牛)
struct sigaction sig;
sig.sa_handler = SIG_IGN;
sig.sa_flags = 0;
sigemptyset(&sig.sa_mask);
sigaction(SIGPIPE,&sig,NULL);
我的程序中,已经捕获了SIGPIPETop
7 楼linaxing(三月三)回复于 2006-07-04 11:39:25 得分 0
你具体是怎么安装信号处理函数的?因为你的是多线程,处理方法要有些不同。
另外,你还是用gdb跟一下吧,应该很容易就能定位出错误。Top
8 楼eqxu(天使联盟)回复于 2006-07-04 13:51:16 得分 0
使用gdb可以获取core文件
注意:::不能在一个进城里关闭了socket另一个进程还在使用要在主程序中关闭
Top




