Я написал эту программу, которая имеет главную функцию, внутри которой я создаю два сокета, например:
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)’
Невозможно ли использовать лямбда таким образом, чтобы обрабатывать сигналы? Просьба сообщить.
P.S. Я знаю, что могу поместить это в деструктор, если бы я сделал правильный ООП, но мне любопытно посмотреть, работает ли это.