【问题标题】:PHP Warning: socket_bind(): unable to bind address [98]: Address already in usePHP 警告:socket_bind():无法绑定地址 [98]:地址已在使用中
【发布时间】:2013-09-23 06:35:47
【问题描述】:

这是一个简单的服务器程序:

<?php
for($i=0;$i<=5;$i++)
{
$host = "xxxxx";
$port=10000;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n".socket_strerror(socket_last_error()) );
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n".socket_last_error() );
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
$input = socket_read($spawn, 2048) or die("Could not read incoming connection\n");
$input = trim($input);
echo "Client Message : ".$input."\n";
socket_close($spawn);
socket_close($socket);
flush(); @ob_flush();
sleep(10);
}
?>

我需要绑定那个端口号。关闭套接字后再次。 每次,在第一个循环中没有错误,在第二个循环中我得到错误。我想,端口没有被清除。我正在使用 Cent OS,我尝试了一些 linux 命令来刷新端口,但没有用。
谁能解释一下这种情况下实际发生的情况? 同一个进程关闭后如何重用同一个端口?

【问题讨论】:

    标签: php sockets network-programming port centos6


    【解决方案1】:

    您不需要在每次循环时都创建、绑定、侦听和关闭侦听套接字。所以不要。

    【讨论】:

    • 我知道。我可以直接读取和写入客户端。它只是一个例子。但是如果与客户端的第一次连接无法重新建立连接,我需要做所有这些事情。
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2018-05-11
    • 2014-08-04
    • 1970-01-01
    • 2014-07-10
    • 2019-07-25
    • 2013-04-02
    • 2012-05-30
    相关资源
    最近更新 更多