1

私はApacheサーバーを持っていて、ポート8000​​と80をリッスンしています

以下のphp関数を使用してWebソケットを作成します

private function createSocket($host,$port)
{
    if( ($this->master=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0 )
    {
        die("socket_create() failed, reason: ".socket_strerror($this->master));
    }

    self::console("Socket {$this->master} created.");

    socket_set_option($this->master,SOL_SOCKET,SO_REUSEADDR,1);
    #socket_set_option($master,SOL_SOCKET,SO_KEEPALIVE,1);

    if( ($ret=socket_bind($this->master,$host,$port)) < 0 )
    {
        die("socket_bind() failed, reason: ".socket_strerror($ret));
    }

    self::console("Socket bound to {$host}:{$port}.");

    if( ($ret=socket_listen($this->master,5)) < 0 )
    {
        die("socket_listen() failed, reason: ".socket_strerror($ret));
    }

    self::console('Start listening on Socket.');

    $this->allsockets[] = $this->master;
}

$host が 127.0.0.1 で、$port が 8000 であると仮定します

シェルコンソールに移動してソケットサーバーを起動すると、警告: socket_bind(): アドレスをバインドできません [98]: アドレスは既に使用されています

$ポートを削除すると、エラーは表示されませんが、ソケットサーバーはリッスンし続け、応答がありません

何が問題ですか?

4

1 に答える 1

1

警告:socket_bind():アドレスをバインドできません[98]:アドレスはすでに使用されています

これは、サーバーが選択したポートをすでに使用していることを意味します。使用されていないポートが見つかるまで、別のポートを選択する必要があります。

于 2012-12-04T08:04:55.973 に答える