我想知道能够将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套接字的那个匹配时该怎么做。
任何帮助都很感激。
杰森
答案 0 :(得分:1)
你的想法听起来完全可行。事实上,我认为这听起来是达到你想要的最佳方式。我不希望在开销/性能方面有很大差异,甚至可能有不同的开销。
当然除了socket()
和bind()
之外,您还必须拦截accept()
。例如,在bind()
中,您可以将请求的TCP端口转换为固定路径名/tmp/converted_socket.<port-number>
或类似的东西。