socket_bind():无法绑定地址 [99](Amazon EC2 上的 Ubuntu)

Posted

技术标签:

【中文标题】socket_bind():无法绑定地址 [99](Amazon EC2 上的 Ubuntu)【英文标题】:socket_bind(): unable to bind address [99] (Ubuntu on Amazon EC2) 【发布时间】:2012-05-30 00:12:30 【问题描述】:

我正在尝试在 EC2 实例上使用套接字,但是当我尝试运行代码时出现以下错误:

php 警告:socket_bind():无法绑定地址 [99]:不能 在第 45 行的 sockets_test.php 中分配请求的地址

以下是部分相关代码:

$CFG = new stdClass();
$CFG->chat_serverip = 'MY_PUBLIC_EC2_IP';
$CFG->chat_serverport = '9111';

$listen_socket = socket_create(AF_INET, SOCK_STREAM, 0))
socket_bind($listen_socket, $CFG->chat_serverip, $CFG->chat_serverport)

如果我使用 127.0.0.1 或私有 IP,这很好用。 我的安全组有以下规则:

0-65535 0.0.0.0/0 (TCP)
0-65535 0.0.0.0/0 (UDP)
ALL 0.0.0.0/0 (ICMP)

【问题讨论】:

hmmm...如果我绑定到 0.0.0.0 它确实有效 它应该如何工作? ***.com/questions/7556811/… socket 绑定到你的 ip(某个接口的 ip)或 0.0.0.0(意思是任何)。这就是您定义套接字可访问的接口的方式。然后将 (socket_connect) 连接到一个 IP(例如 cloudflare dns 服务器的 1.1.1.1 IP)。 【参考方案1】:

您不能绑定到外部 IP,您必须绑定到内部 IP,并设置一个规则以允许该端口,以便当他们连接到外部 IP 和端口时,它会被重定向到内部 IP。

【讨论】:

你能解释一下吗...我对此有点陌生。一点解释将不胜感激。【参考方案2】:

phantomjs有问题,

我们需要绑定内部ip的我们可以在ifconfig看到, 不是我们无法看到的外部 IP

【讨论】:

以上是关于socket_bind():无法绑定地址 [99](Amazon EC2 上的 Ubuntu)的主要内容,如果未能解决你的问题,请参考以下文章

PHP:TCP 套接字,“无法绑定地址”

PHP socket_bind 错误(socket地址只有一种用法)

socket_bind() : 每个套接字地址(协议/网络地址/端口)通常只允许在 php 中使用一次

socket.error:[errno 99] 无法在 python 中分配请求的地址和命名空间

PHP 警告:socket_read():无法从套接字 [104] 读取:连接被对等方重置

web-socket php中的问题