我写了这个程序,有一个主要功能,在其内部,我创建了两个插槽,这样的:使用Auto和Lambda来处理信号?
int sockfd1 = socket(AF_INET, SOCK_STREAM, 0);
int sockfd2 = socket(AF_INET, SOCK_STREAM, 0);
现在我做一些东西与他们,当用户按下CTRL + C终止这个过程中,我想确保插座正常关闭,所以我这样做:
auto sigTermHandler = [&] (int param) { close(sockfd1); close(sockfd2); };
signal(SIGTERM, sigTermHandler);
但是,这将引发当作为g++ -std=gnu++0x <filename>.cpp
编译以下编译错误:
error: cannot convert ‘main(int, char**)::<lambda(int)>’ to ‘__sighandler_t {aka void (*)(int)}’ for argument ‘2’ to ‘void (* signal(int, __sighandler_t))(int)’
用这种方法来处理信号不可能使用lambda吗?请指教。
P.S.我知道我可以把它放在析构函数中,如果我做了适当的OOP,但我很好奇,看看它是否有效。