Networking TCP和POSIX套接字接受()语义

Networking TCP和POSIX套接字接受()语义,networking,sockets,posix,tcp,Networking,Sockets,Posix,Tcp,情况:服务器调用accept()。客户端向服务器发送一个SYN。服务器获取SYN,然后将SYN/ACK发送回客户端。但是,客户机现在挂起/挂断,因此它从不向服务器发送ACK 会发生什么?accept()是在收到SYN后立即返回,还是在返回客户端的ACK之前一直阻塞?如果它阻塞,它最终会超时吗?它最终会超时,因为该场景实际上是一个DoS(拒绝服务)场景,并且接受的资源返回给操作系统使用。if可能会导致主套接字阻塞,因为一旦accept返回有效的文件描述符,客户端就连接到服务器 如果从客户端连接时发

情况:服务器调用accept()。客户端向服务器发送一个SYN。服务器获取SYN,然后将SYN/ACK发送回客户端。但是,客户机现在挂起/挂断,因此它从不向服务器发送ACK


会发生什么?accept()是在收到SYN后立即返回,还是在返回客户端的ACK之前一直阻塞?如果它阻塞,它最终会超时吗?

它最终会超时,因为该场景实际上是一个DoS(拒绝服务)场景,并且接受的资源返回给操作系统使用。if可能会导致主套接字阻塞,因为一旦accept返回有效的文件描述符,客户端就连接到服务器


如果从客户端连接时发生错误,将设置errno值,最好记录或显示错误消息,但是,请阅读手册页,在大多数情况下,它是最好的信息来源。

如果客户端从未发送ACK,则如果套接字标记为非阻塞,则accept()将阻塞或返回EAGAIN。

accept()
的调用将阻塞,直到连接为止。除非三方握手完成,否则没有连接,因此
accept()
不应返回。对于非阻塞套接字,它不会阻塞,但也不会向您提供有关部分完成的握手的信息。

如果出现故障,例如,由于握手未完成而超时,它将返回-1并设置errno。我相信,在查看手册页之后,它会将errno设置为ECONNABORTED