我正在使用我制作的类http://localhost:8080/SimpleRestApi/api/courses
在程序中创建套接字连接。程序在无限循环中运行并退出它我使用ctrl-c。现在当我关闭程序时,我的析构函数没有被调用(内存释放,因为我已经读过here但是在中断程序时没有释放套接字)。有没有办法调用析构函数退出这样的程序?
套接字类定义:
Socket
析构函数定义:
class Socket
{
private:
int m_sock;
sockaddr_in m_addr;
public:
Socket();
virtual ~Socket();
// Server initialization
bool create();
bool bind ( const int port );
bool listen() const;
bool accept ( Socket& ) const;
// Client initialization
bool connect ( const std::string host, const int port );
// Data Transimission
bool send ( const std::string ) const;
int recv ( std::string& ) const;
void set_non_blocking ( const bool );
bool is_valid() const { return m_sock != -1; }
};
主要功能:
Socket::~Socket(){
close(m_sock);
}
答案 0 :(得分:2)
是的,您可以为SIGINT设置信号处理程序(单击CTRL-C时生成的信号)。 使用C ++标准库,您可以编写:
void close_connection(int signal)
{
delete socket; // invoke destructor
socket.close(); // Alternative, you can add a close method to your socket class
}
// Install a signal handler
std::signal(SIGINT, close_connection);
您可以在此处找到有关如何使用C ++管理信号的更多信息 http://en.cppreference.com/w/cpp/utility/program/signal