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
      AI  C++   ,             ,
      websocketpp       ,       ,     ,   websocket   8765       ,             。

プログラムが終了したときに、自動的にポートを閉じることができますか?
実践を経て、コア関連コードを必要な友达に共有します.
このタスクは次の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)<
  • サンプルコードをテストし、正常に動作していることを確認します.具体的なコードは以下の通りです:
  • #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; }