C++プログラム終了はTCPポートを自動的に直ちに閉じる
2284 ワード
[2020-04-23 16:29:46] [library] asio::listen called from the wrong state terminate called after throwing an instance of ‘websocketpp::exception’ what(): invalid state Aborted
プログラムが終了したときに、自動的にポートを閉じることができますか?
実践を経て、コア関連コードを必要な友达に共有します.
このタスクは次の3つのステップに分解されます.プログラム終了時にインターセプタを設定する必要があり、プログラム終了時にmain()関数に自動的に呼び出し、const int autoCloseWebSocket=std::atexit(UsbInput::VirtualUsbServer::shutdownWebsocket)を登録する.if(autoCloseWebSocket!=0){std::cerr<<「登録WebSocketはプログラム終了時に自動的にクローズできませんでした.」;return EXIT_FAILURE; } websocketpp指定ポートvoid VirtualUsbServer::shutdownWebsocket(){websocket_server.stop_listening();LOG(INFO)< サンプルコードをテストし、正常に動作していることを確認します.具体的なコードは以下の通りです:
AI C++ , ,
websocketpp , , , websocket 8765 , 。
プログラムが終了したときに、自動的にポートを閉じることができますか?
実践を経て、コア関連コードを必要な友达に共有します.
このタスクは次の3つのステップに分解されます.
#include
#include
#include
#include "UsbEmulator.h"
#include "MouseDeviceParser.h"
#include "KeyboardDeviceParser.h"
#include "VirtualUsbServer.h"
#include "HappyTool.h"
#include
#include
#include
#include
void VirtualUsbServer::shutdownWebsocket(){
websocket_server.stop_listening();
LOG(INFO)<< " Websocket . " << std::endl;
}
int main(int argc, char* argv[]) {
/**
glog ,INFO、WARNING、ERROR FATAL。 , FATAL , 。ERROR FATAL , stderr。
*/
//
gflags::ParseCommandLineFlags(&argc, &argv, true);
//
google::InitGoogleLogging(argv[0]);
google::SetLogDestination(google::INFO, "log/"); // , INFO
UsbInput::VirtualUsbServer serverInstance=UsbInput::VirtualUsbServer();
const int autoCloseWebSocket = std::atexit(UsbInput::VirtualUsbServer::shutdownWebsocket);
if (autoCloseWebSocket!= 0) {
std::cerr << " WebSocket .
";
return EXIT_FAILURE;
}
serverInstance.start_server();
return 0;
}