如何调试C中的套接字重置

如何调试C中的套接字重置,c,sockets,freebsd,C,Sockets,Freebsd,我有一些与服务器建立连接的代码。有一段时间,我的代码运行正常,一切正常 但是,在尝试连接时,我的应用程序会发送一个SYN标志,获取一个SYN/ACK,然后开始发送一个FIN标志,终止连接 这是使用FreeBSD9。我已经检查了所有限制,据我所知,我没有超过任何打开的套接字限制或任何东西,如果是这样的话,我不会执行套接字打开,甚至不会发送SYN标志 我还可以做些什么来调试它?在一个出站连接发生这种情况之后,所有的出站连接都会发生这种情况,所以我认为这一定是某种系统性问题 这更可能是一个编码叫喊,而

我有一些与服务器建立连接的代码。有一段时间,我的代码运行正常,一切正常

但是,在尝试连接时,我的应用程序会发送一个SYN标志,获取一个SYN/ACK,然后开始发送一个FIN标志,终止连接

这是使用FreeBSD9。我已经检查了所有限制,据我所知,我没有超过任何打开的套接字限制或任何东西,如果是这样的话,我不会执行套接字打开,甚至不会发送SYN标志


我还可以做些什么来调试它?在一个出站连接发生这种情况之后,所有的出站连接都会发生这种情况,所以我认为这一定是某种系统性问题

这更可能是一个编码叫喊,而不是一些复杂、险恶的网络问题。我同意netcoder,检查您的呼叫,检查您的返回值。检查你没有做一些愚蠢的事情,比如吃文件描述符!检查防火墙的两端,我以前见过防火墙过度保护的效果。或者发布一些代码供我们查看…

对于初学者,您可以检查任何I/O函数调用是否失败,并检查
errno
。您是否实施了一些握手协议?或者您是否在观察通信量(即,
tcpdump
wireshark
,或其他)以了解您收到了SYN/ACK?这是TCP,我只是在观察tcpdump的通信量您连接的服务器是什么?它是你在另一个BSD盒上的代码还是别的什么?可能是任何东西-互联网盒,我会再看一遍。我确实检查了大多数I/O操作以及套接字描述符的打开/关闭,因此我实际上倾向于一些复杂的险恶网络问题。