2012-03-21 36 views
2

我在写一个使用Winsock的TCP服务器应用程序。连接到我的客户端(我没有源,因此无法进行更改)的行为如下:如果它连接并关闭连接(因为它是一个不需要的客户端),它将立即重新连接。因此,如果有一个客户想要连接到我但我不想与之通话的客户(即我所谓的不受欢迎的客户),我会疯狂地转动我的accept()电话, 。从两个IP地址接收TCP连接

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

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

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

+1

你可以用防火墙阻止或过滤该端口上的传入连接吗? – 2012-03-21 20:58:28

回答

2

我相信你的问题已经在过去的stackoverflow问。也许看着这两个线程可以帮助你解决问题:

如果你害怕遇到DoS攻击或对性能问题,接受是在OSI stack的级别4上执行的,这是处理SYN-A的相对较低的级别CK与客户的关系,因此在accept()不会导致重要的性能问题后,来自外部的基本连接立即丢失。

但是,如果您想绝对接受两个IP地址,我认为您可能必须使用防火墙或RAW套接字直接从TCP数据包中检索IP地址并自行接受连接,但这样做,我认为,时间的巨大损失。