我正在Linux上使用套接字编程编写一个应用程序(客户端和服务器)。我遇到过这样的情况,我的服务器应用程序永远不会响应另一端的初始 SYN 数据包。
我仍在调试该问题。
由于我的服务器正在侦听端口,因此它永远不会生成接受事件。接受事件是在 TCP 握手完成后生成还是在收到初始 SYN 数据包时生成接受事件?
一些有用的链接,会有帮助的。
最好的
TCP握手完成后是否产生accept事件
是的。
或者当收到初始 SYN 数据包时生成接受事件?
不。握手已经发生了。
accept()
只是从已接受的连接队列中为您提供一个套接字。当队列为空时,它会阻塞。每当队列(listen()
积压队列)中有东西时,就会生成接受事件(实际上是侦听套接字上的“可读”事件)。
这意味着即使服务器从未调用过,客户端也可以连接。
这里有一些详细的解释:
http://lwn.net/Articles/508865/http://www.ibm.com/developerworks/aix/library/au-tcpsystemcalls/ 您遇到什么样的错误?确保客户端可以访问您的服务器。