2

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

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

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

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

4

1 回答 1

2

我相信您的问题过去已经在 stackoverflow 上提出过。也许看看这两个线程会帮助你解决你的问题:

如果您害怕遇到 Dos 攻击或性能问题,accept 作用于OSI 堆栈的第 4层,这是一个相对较低的级别,用于处理与客户端的 SYN-ACK 协商,因此立即与外部建立基本连接在 accept() 之后删除不会导致重要的性能问题。

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

于 2012-03-21T21:05:53.273 回答