1

我想知道能够将 AF_INET 套接字转换为使用 AF_UNIX 是多么可行。这样做的原因是我有一个程序可以打开一个 TCP 套接字,但我们无法更改它。因此,为了减少开销,我们希望将此套接字绑定为使用 AF_UNIX 进行通信。

到目前为止,我的想法是使用 LD_PRELOAD 来实现这一点——拦截 bind() 和 accept(),但是不清楚如何最好地实现这一点,或者即使这是最好的方法。

到目前为止,在 bind() 中绑定,如果套接字类型是 AF_INET 并且它的 IP/端口是我希望转换为 AF_UNIX 的套接字,那么我在此处关闭 sockd,并打开一个 AF_UNIX。但是,这似乎在 accept() 中进一步引起问题——因为我不确定当 accept() 中的 sockfd 与我希望告诉使用 AF_UNIX 套接字的那个匹配时该怎么做。

任何帮助表示赞赏。

杰森

4

1 回答 1

1

你的想法听起来完全可行。事实上,我认为这听起来是实现你想要的最好的方式。不过,我不希望开销/性能有很大不同,甚至是明显不同。

当然socket(),除了bind()and之外,您还必须拦截accept()。例如bind(),您可以将请求的 TCP 端口转换为固定路径名/tmp/converted_socket.<port-number>或类似名称。

于 2013-06-07T14:16:28.510 回答