从完全2个IP地址接受TCP连接

时间:2012-03-21 20:54:12

标签: tcp winsock winsock2 winsockets

我正在使用Winsock编写TCP服务器应用程序。连接到我的客户端(我没有源,因此无法进行更改)的行为如下:如果它连接并关闭连接(因为它是一个不受欢迎的客户端),它将立即重新连接。因此,如果有一个客户想要连接到我但我不想与之交谈的人(即我称之为不受欢迎的客户端),我会像我的accept()调用一样疯狂地旋转

我想找到一种方法来防止疯狂转动我的accept()调用。如果只有一个所需的客户端,我可以将我的侦听套接字绑定到该客户端的IP地址而不是INADDR_ANY。但是,唉,有超过1个理想的客户。据我所知,当该集合的大小大于1时,无法仅允许来自一组所需IP地址的连接。

我看过WSAAccept。不幸的是,看起来这只会将疯狂的旋转转变为回调。

有没有办法拒绝一个不涉及accept()唤醒和返回的尝试连接(因此导致所有这些疯狂的旋转)?

1 个答案:

答案 0 :(得分:2)

我相信过去已经在stackoverflow上询问了你的问题。也许查看这两个主题可以帮助您解决问题:

  

如果你害怕遇到Dos攻击或性能问题,那么接受是在OSI stack的第4级,这是一个相对较低的级别,正在处理与客户端的SYN-ACK协商,所以a在接受()之后,外部的基本连接立即下降,不会导致重要的性能问题。

但是,如果您想要绝对接受两个IP地址,我认为您可能必须使用防火墙或RAW套接字直接从TCP数据包中检索IP地址并自行接受连接,但这将是,我想想,浪费了很多时间。