C ++ Windows套接字 - 程序退出时关闭套接字

时间:2015-11-14 11:42:40

标签: c++ windows sockets

我正在使用WinSock2 api创建一个简单的控制台客户端/服务器应用程序,但我需要确保在退出应用程序时客户端的套接字正确关闭。我已经尝试使用SetConsoleCtrlHandler但是它创建了一个主循环保持运行10秒的线程。

当用户按下关闭按钮时,有没有办法关闭套接字?

1 个答案:

答案 0 :(得分:0)

是的,使用管理它的类包装本机Winsock2套接字。

class Socket{
  SOCKET m_NativeSocket;

public:
  Socket(){
    m_NativeSocket = ::socket(...);
  }

  ~Socket(){
   ::closesocket(m_NativeSocket);
  }

};

你应该遵循这种模式,因为:

  1. 套接字适合作为对象,而不仅仅是浮动变量
  2. 添加析构函数可确保无论应用程序是否突然中止,都会抛出异常,socket超出范围 - 套接字正确关闭
  3. 使用套接字作为对象更好,更清晰。
  4. 确保实现正确的移动构造函数。