2017-07-10 13 views
0

現在、クライアントのブラウザタブを閉じる(またはリフレッシュする)ことでサーバを終了します。 WebSocket close関数がサーバー上で呼び出されると、サーバーはリッスンを停止し、すべての接続を閉じ、終了します。ここでは、コードは次のようになります。上記のスニペットでWebSocket ++サーバは終了しましたが、ポートはまだ使用中です

void onClose(server* s, websocketpp::connection_hdl hdl) { 
    bool running = false; 
    s->stop_listening(); 
    for (vector<Player *>::iterator it = players.begin(); it != players.end(); ++it) { 
     Player *p = *it; 
     s->pause_reading(p->io); 
     s->close(p->io, websocketpp::close::status::normal, ""); 
    } 
    s->stop(); 
    exit (0); 
} 

、私はすべての「プレイヤー」(接続しているクライアント)をループしています。 p->ioの使用は、websocketpp::connection_hdlを指します。私は再びサーバーを実行したとき

はしかし、私はこのエラーを取得する:

[info] asio listen error: system:98 (Address already in use) 

私は再びサーバーを使用する前に数分待たなければなりません。これは生産上迷惑で、潜在的に危険です。

何が起こっている可能性がありますか?

+2

お気に入りの検索エンジンに 'SO_REUSEADDR'をパンチします。 –

+1

ダビデが言ったようにして、あなたがしていることを知ってください。次に、websocketspp関数を使用します。s-> set_reuse_addr(true) – guilleamodeo

+0

@guilleamodeoありがとう!それはうまくいった。それを答えとして加え、私はそれをアップホートして受け入れます。 –

答えて

1

ダビデが言ったように、あなたがしていることを知っている。次に、websocketspp関数s-> set_reuse_addr(true)を使用してください。

関連する問題