使连接失败如果服务器没有在接受呼叫中等待

时间:2012-04-03 16:16:30

标签: c++ winsock

我需要创建一个服务器套接字,如果它在接受调用时没有阻塞,它应拒绝连接请求。

服务器的行为将是

一个。等待客户连接
湾等到客户关闭连接
C。转到步骤

如果服务器正在等待客户端连接关闭,它应该立即拒绝客户端连接调用。在获得客户端连接后,我们无法关闭服务器套接字。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您要求的只是在服务器端无法实现。当它仍在队列中等待被接受时,根本无法拒绝挂起的连接。您可以(并且应该)在调用listen()时将积压值设置为1,但这只意味着在您与其他客户端进行通信时,队列中最多只能有1个连接。您必须调用accept()从队列中删除该挂起的连接,然后如果您当时不想与该客户端通信,请立即在其上调用closesocket()

您可以执行的操作是调用WSAAccept()而不是accept(),这样您就可以根据需要分配一个返回CF_REJECTCF_ACCEPT的回调函数,然后您需要在线程或重叠I / O中连续调用WSAAccept(),从队列中删除待处理的连接,并在与已接受的连接进行通信时拒绝它们,直到您关闭它为止。