2017-07-10 38 views
0

目前,我通過關閉(或刷新)客戶端瀏覽器選項卡來結束服務器。當在服務器上調用WebSocket關閉函數時,服務器停止監聽,關閉所有連接等並退出。這裏是代碼: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)

相關問題