C 中的套接字是否提供任何方式来限制基于 IP 的套接字的传入连接数?
例如,为了防止一个客户端 IP 发送垃圾邮件连接,有没有办法限制一个 IP 可以连接到套接字的次数?
或者这样的东西必须定制吗?
C 中的套接字是否提供任何方式来限制基于 IP 的套接字的传入连接数?
例如,为了防止一个客户端 IP 发送垃圾邮件连接,有没有办法限制一个 IP 可以连接到套接字的次数?
或者这样的东西必须定制吗?
标准套接字 API 中没有任何内容,没有。使用标准 API,服务器代码唯一能做的就是accept()
客户端连接,检查其 IP,然后在需要时关闭连接。
对于 Microsoft 的 WinSock API,该WSAAccept()
函数确实有一个回调,在从服务器队列接受连接之前调用该回调。回调函数可以决定接受连接、拒绝连接或将其留在队列中。
套接字中没有类似的东西。您需要自定义解决方案,最好考虑在防火墙中执行此操作。
我觉得您正在谈论的真正意图是限制,即针对特定客户端/连接,在给定时间内仅允许固定数量的数据包。这听起来比允许/禁止更多连接更现实的使用场景。
大多数现代语言都提供某种支持,例如 java 或 c#,但不提供 c。
然而,这里有一个优雅的方法来实现它。我自己已经在生产代码中使用过它。