我很好奇如果这是可能的映射UNIX socket到INET座。这种情况是简单的,我想到连接MySQL server.不幸的是,它具有INET座残疾人和因此我只能连接与UNIX socket.工具,我用写有连接在一INET插座,所以我想看看如果我可以的地图的一个月。

它花了相当数量的搜索,但是我没找到 socat, ,据称没什么我要找的。我想知道,如果任何人有任何建议,就如何实现这一目标。该命令行我已经用(部分取得成功)是:

socat -v UNIX-CONNECT:/var/lib/mysql/mysql.sock TCP-LISTEN:6666,reuseaddr

现在我可以使连接和谈的服务器。不幸的是,任何试图使多个连接失败,因为我需要用叉选项,但这一选择似乎呈现连接,无法正常工作。

我知道我可以解决这一问题与Perl(我的首选的语言),但是我宁愿避免编写整个执行自己。我熟悉的IO::座图书馆,我只是希望任何人经验做这样的事情。开放的建议/想法。

谢谢。

有帮助吗?

解决方案

将你的参数顺序颠倒过来 socat, ,并且它有效。

socat -v tcp-l:6666,reuseaddr,fork unix:/var/lib/mysql/mysql.sock

这指示 socat

  1. 侦听 TCP 端口 6666(使用 SO_REUSEADDR)
  2. 等待接受连接
  3. 建立连接后,分叉。在孩子中,继续执行以下步骤。在父级中,转到2。
  4. 打开到 UNIX 域的连接 /var/lib/mysql/mysql.sock 插座。
  5. 在两个端点之间传输数据,然后退出。

反过来写

socat -v unix:/var/lib/mysql/mysql.sock tcp-l:6666,reuseaddr,fork

不起作用,因为这指示 socat

  1. 打开到 UNIX 域的连接 /var/lib/mysql/mysql.sock 插座。
  2. 侦听 TCP 端口 6666(使用 SO_REUSEADDR)
  3. 等待接受连接
  4. 建立连接后,生成一个工作子进程以在两个地址之间传输数据。
  5. 父级继续接受第二个地址上的连接,但第一个地址不再可用:它被交给了第一个孩子。所以从现在开始就不能做任何有用的事情了。

其他提示

是的,你可以这样做在Perl。

看看 perlipc, IO::选择, IO::插座Beej的指导网络,编程.

您可能要考虑在POE做它 - 它是异步的库来处理事件,所以它看起来像伟大的任务

有不是100%相关,但我用POE写无状态协议之间代理(HTTP)和有状态的协议(Telnet会话,并且更具体 - MUD会话),并且这是相当简单的 - 可以在检查代码在这里: HTTP:/ /www.depesz.com/index.php/2009/04/08/learning-poe-http-2-mud-proxy/

在评论有人还建议科罗/ AnyEvent - 我还没有发挥它,但你可能要检查它

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top