socket_bind():无法绑定地址

时间:2014-06-14 12:27:09

标签: php sockets

我已经看过这个问题了至少十几次。没有一个回复帮助了我。

代码:

$host = "127.0.0.1";
$port = 80;

//no timeout
set_time_limit(0);

//create socket
$socket=socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");


if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo socket_strerror(socket_last_error($socket));
    exit;
}

$result = socket_bind($socket, $host, $port) or die("Could not bind socket\n");

' if'声明被添加,因为一个回复建议把它放在那里。我似乎没有为我做任何事情。我打算把它拿出来。无论如何,我的错误是:

警告:socket_bind():无法绑定地址[10013]:尝试以其访问权限禁止的方式访问套接字。

而且,是的,我认为它应该意味着该端口正被另一个进程使用。我改变了端口号约30次。我暂时关闭了我的(Windows 8)防火墙。我运行了netstat,我看到这些端口没有关闭,所以我有30个插槽具有相同的PID和名称。

所以,我的问题是:我做错了什么?

3 个答案:

答案 0 :(得分:1)

要绑定到1024以下的端口,该进程需要特权。典型的唯一根可以做到这一点。

有关本主题的更详细讨论,请参阅此处:Is there a way for non-root processes to bind to "privileged" ports on Linux?

答案 1 :(得分:1)

感谢那些回复的人,但我自己想出了问题。我用过的教程说导航到server.php文件。别笑,但我通过浏览器在那里导航。所以,这条消息在我的浏览器上弹出。

我在命令提示符下运行了同一个文件,我得到了这个错误,或者它看起来像是挂在那里,这取决于我选择的端口。它没有崩溃......它只是没有输出。我给了它一些输出(yay echo语句!!)。

无论如何,再次感谢。

答案 2 :(得分:1)

您最常遇到此错误的原因是您尝试使用的套接字已被其他程序使用。你正试图打开一个套接字来监听端口80,apache正在监听什么端口?如果它也是端口80,那就是你的问题。