我很好奇是否可以将UNIX套接字映射到INET套接字。情况很简单,我想连接到MySQL服务器。不幸的是它禁用了INET套接字,因此我只能连接UNIX套接字。我正在使用/写入的工具必须连接在INET插槽上,所以我试图看看是否可以将一个映射到另一个。
我花了很多时间进行了搜索,但确实找到了socat,据说这是我正在寻找的东西。我想知道是否有人对如何实现这一点有任何建议。我一直在使用的命令行(部分成功)是:
socat -v UNIX-CONNECT:/var/lib/mysql/mysql.sock TCP-LISTEN:6666,reuseaddr
现在我可以建立连接并与服务器通信。不幸的是,任何尝试进行多个连接都会失败,因为我需要使用fork选项,但是这个选项似乎会使连接失效。
我知道我可以用Perl解决这个问题(我的首选语言),但我宁愿避免自己编写整个实现。我熟悉IO :: Socket库,我只是希望有人有这方面的经验。接受建议/想法。
感谢。
答案 0 :(得分:6)
将参数的顺序反转为socat
,并且有效。
socat -v tcp-l:6666,reuseaddr,fork unix:/var/lib/mysql/mysql.sock
这会指示socat
SO_REUSEADDR
)/var/lib/mysql/mysql.sock
套接字的UNIX域连接。以相反的方式写作
socat -v unix:/var/lib/mysql/mysql.sock tcp-l:6666,reuseaddr,fork
不起作用,因为这会指示socat
/var/lib/mysql/mysql.sock
套接字的UNIX域连接。SO_REUSEADDR
)答案 1 :(得分:0)
是的,您可以在Perl中执行此操作。
查看perlipc,IO::Select,IO::Socket和Beej's Guide to Network Programming。
答案 2 :(得分:0)
您可能需要考虑在POE中执行此操作 - 它是用于处理事件的异步库,因此它看起来非常适合任务。
它不是100%相关,但我使用POE在无状态协议(HTTP)和状态协议(telnet会话,更具体地说是MUD会话)之间编写代理,而且它很简单 - 你可以检查代码在这里:http://www.depesz.com/index.php/2009/04/08/learning-poe-http-2-mud-proxy/。
在评论中,有人还建议使用Coro / AnyEvent - 我还没玩过它,但你可能想检查它。