【问题标题】:Can't connect to local socket, connection refused无法连接到本地套接字,连接被拒绝
【发布时间】:2011-11-04 22:12:06
【问题描述】:

我已经在这几天了,只是无法解决问题。我也把它放在了 Ubuntu 论坛上,但什么也没听到。基本上,我在 /tmp/mysockets 中有一个本地套接字,我在 php 脚本中成功创建了它——

if (($sock = socket_create(AF_UNIX, SOCK_STREAM,0)) === false) 
{
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
        exit();
}

但我无法连接,通过

if (socket_connect($sock, $sock_str) === false) 
{
        echo "socket_connect() on " . $sock_str . " failed: reason: " . socket_strerror(socket_last_$
        socket_close($sock);
        exit();
}

这给了我

警告:socket_connect():无法连接 [111]:连接被拒绝 在 /var/www/myscript.php 第 66 行 socket_connect() 上 /tmp/mysockets/sock 失败:原因:连接被拒绝

现在,我认为这可能是权限问题,但我已经对 /tmp、mysockets 和 sock 进行了 chmod 777,这并不重要。可能是什么问题?

【问题讨论】:

  • 你打电话给socket_listen() 吗?
  • @stewe 脚本在 socket_bind() 上已经失败,见下文
  • 监听套接字的是什么?您无法连接到没有人在监听连接的套接字。
  • @duskwuff 脚本中早先启动的进程正在监听它。实际上,在其他几乎相同的脚本中,我没有 socket_bind();我只是根据评论员的建议把它放在这里。
  • 您确定在您尝试连接时该进程已开始侦听吗?你可能已经领先了。

标签: php linux sockets connection


【解决方案1】:

你需要在socket_create()之后使用socket_bind()socket_listen()

【讨论】:

  • 谢谢我尝试了 socketbind($sock, '127.0.0.1') 并得到'无法绑定,权限被拒绝'所以这是进步,但我喜欢我说一切都是 777。这是什么意思?
  • 如果您尝试绑定到低编号端口,您需要是 root。
  • @Michael get_current_user() 返回“root”。
  • 你想使用什么端口号?
  • 它是一个 UNIX 域套接字——它由一个路径标识,而不是一个 IP/端口对。
【解决方案2】:

所以,原来应该监听这个套接字的进程崩溃了——我正在远程执行此操作(而且我刚刚习惯远程编译/调试)所以我没有看到这个首先。对不起,我错误地描述了这个问题。 @duskwuff 你的想法是对的。

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多