微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux TCP套接字崩溃

我写的通过Linux TCP套接字进行通信的networking应用程序。 最近我已经注意到发送系统调用崩溃我的应用程序。 当两个同伴都起来的时候,它工作正常(我现在正在testing崩溃恢复)。 但是,当一个同行倒下第二次崩溃执行这段代码

fprintf(stderr,"out_tcp %dn",out_tcp); if(send(out_tcp,&packet,sizeof(packet),0) == -1) fprintf(stderr,"send TCP error"); fprintf(stderr,"after send");

套接字已经准备好并连接,并且在第二个对等closures之前执行了好几次。 我期望这个代码返回-1值,但它只产生输出“out_tcp 11”,然后应用程序退出。 没有错误消息,没有从发送返回的值。 我在Valgrind下运行它,它说应用程序正常退出 – 没有错误/警告消息。

有没有人有任何想法如何debugging? 使用的工具? 我相当坚持这一点,因为我没有得到任何消息。

提前感谢Harnen

如何仅使用WaitForDebugEvent系列函数来监视UNHANDLEDexception?

如何在subprocess中启动崩溃(很less)的应用程序

array_map导致服务器崩溃

在两个线程中同时中止()

Visual Studio 2008 c ++应用程序中的无声崩溃

C#应用程序在特定点不断崩溃,需要帮助理解问题签名

查找崩溃的函数名称

在编译时,什么原因导致MS Windows“系统”进程崩溃?

Python / Chrome / Java的分段错误(linux mint)

_dl_runtime_resolve()中的分段错误

看起来你的应用程序忽略了SIGPIPE。 请参阅此主题了解更多信息:

如何防止SIGPIPE(或正确处理)

解决:在发送函数中使用MSG_EOR , MSG_NOSIGNALflag如下

if(send(out_tcp,**MSG_EOR|MSG_NOSIGNAL**) == -1)

希望能帮助到你

你有没有尝试RTFM(阅读罚款手册)有关错误条件? 你抓住或忽略任何信号? 那么errno全局变量呢?

man send

而且TCP也是一个流媒体协议,所以如果你不需要任何特殊的标志,那么推荐使用像read(),write()这样的常用的流式访问命令。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐