我已经创建了一个服务器套接字,并指定了要侦听的端口12345,并通过将INADDR_ANY传递给bind()来允许对它的连接请求通过系统上任何可用的IP地址。以下是服务器套接字的值:

我的问题是,我能否指定允许哪个IP地址和端口号向我发送连接请求(即上图中的外部地址中的值)?
发布于 2016-07-03 05:09:39
您不能在打开侦听套接字时指定“一劳永逸”,但如果单个连接不是从您想要的IP发起的,则可以拒绝它们。WSAAccept function允许您指定一个条件函数,该函数决定是否应该接受连接。
这本身是有效的,但我不确定以这种方式拒绝连接是否等同于接受并立即关闭它,也许您还需要设置套接字选项SO_CONDITIONAL_ACCEPT,以便在连接打开之前拒绝它。
发布于 2018-12-11 15:55:23
有两种主要情况用于匹配本地被动打开和外部主动打开中的套接字。在第一种情况下,本地被动打开完全指定了外部套接字。在这种情况下,匹配必须是精确的。在第二种情况下,本地被动打开未指定外部套接字。在这种情况下,只要本地套接字匹配,任何外来套接字都是可接受的。其他可能包括部分受限的匹配。
这是对RFC793的介绍。在实际实现中,如@alain,Windows系统可以使用SO_CONDITIONAL_ACCEPT,Linux系统没有,需要调用accept后再判断是否允许IP和Port,不允许直接断开连接。
发布于 2016-07-03 04:12:34
是的你可以。这就是为什么会有防火墙。您可以配置某些规则,如只允许某个ip地址连接。Windows有一个集成的防火墙,您的路由器也配备了。
您不能在程序中指定这些限制。
https://stackoverflow.com/questions/38163988
复制相似问题