我有一个由两个进程组成的应用程序(让我们称之为A和B),通过Unix域套接字相互连接。大部分时间它工作正常,但有些用户报告以下行为:
用户还报告了此行为的变体,例如:
问题是我无法在本地重现此行为。我试过OS X和Linux。用户使用各种系统,主要是OS X和Linux。
我已经尝试并考虑过的事情:
还有什么可能导致这样的行为?我肯定知道A和B都不会过早地关闭()套接字,并且我肯定地知道它们都没有崩溃,因为A和B都能够报告错误。好像内核突然决定出于某种原因从插座拔出插头。
答案 0 :(得分:3)
也许你可以按照http://modperlbook.org/html/6-9-1-Detecting-Aborted-Connections.html
中的描述尝试strace我认为您的问题与此处描述的问题有关:http://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable
不幸的是,我自己有一个similar problem,但无法通过给定的建议来解决问题。但是,也许SO_LINGER对你有用。
答案 1 :(得分:2)
shutdown()
可能已经被召唤过了其中一个
套接字端点。
如果任何一方可以分叉并执行a
孩子的过程,确保
FD_CLOEXEC
(close-on-exec)标志设置在
套接字文件描述符,如果你没有
打算让它继承
儿童。否则孩子进程
可能(意外或其他方面)
操纵套接字连接。
答案 2 :(得分:0)
我还会检查中间没有偷偷摸摸的防火墙。路由上的中间转发节点可能会发送RST
。追踪失败的最佳方法当然是the packet sniffer(或其GUI cousin。)