确定重定向套接字打开请求的预期 IP 的 POSIX 调用是什么?

What is the POSIX call to determine the intended IP of a redirected socket open request?

我正在修改我的主机文件以将(例如数据库调用)的 IP 地址更改为我正在编写的本地代理。

10.1.2.3 localhost
10.1.2.4 localhost

我希望侦听套接字的代理计算出套接字打开请求打算发送到哪台机器。例如,在我的客户中,我正在打电话。

dbPort = 4000;
openDatabaseConnection("10.1.2.3", dbPort);
...
openDatabaseConnection("10.1.2.4", dbPort);

所以两者都在同一个套接字上调用。我希望我的代理服务器监听 4000 并通过 预期的 IP 地址将去往 10.1.2.3 的代理服务器重定向到正确的服务器。

是否有 POSIX 调用从套接字 header 获取此信息?

我的问题是:确定重定向套接字打开请求的预期 IP 的 POSIX 调用是什么?

不,无法知道客户端程序中使用了哪个 IP 地址。主机文件定义了一组别名,name/address 解析器将别名替换为实际地址(在您的情况下为 localhost),使您丢失有关所用别名的所有信息。没有 "redirection",别名替换是在客户端连接之前进行的。

解决您问题的最简单方法不是通过 hosts 文件使用 IP 地址别名,而是使用不同的端口号。

您可能还可以为不同的地址添加 "virtual" 接口,并让代理服务器侦听这两个接口上的连接。