CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

如果两个线程操作同一个Socket,一个线程recv,另一个send。这样会不会导致程序莫名其妙的退出

楼主microhard(Befree)2006-07-04 09:52:37 在 Linux/Unix社区 / 程序开发区 提问

 
  如果两个线程操作同一个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

相关问题

关键词

得分解答快速导航

  • 帖主:microhard
  • bobox
  • wzzww
  • ouygg
  • linaxing

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo