Napisałem ten program, który ma główną funkcję, wewnątrz którego, tworzę dwa gniazda, tak:Używanie Auto i Lambda do obsługi Signal?
int sockfd1 = socket(AF_INET, SOCK_STREAM, 0);
int sockfd2 = socket(AF_INET, SOCK_STREAM, 0);
teraz zrobić kilka rzeczy z nimi, a gdy użytkownik naciśnie Ctrl + C, aby zakończyć proces, chcę się upewnić gniazda zamyka się prawidłowo, więc to zrobić:
auto sigTermHandler = [&] (int param) { close(sockfd1); close(sockfd2); };
signal(SIGTERM, sigTermHandler);
Ale to wyrzuca następujący błąd kompilacji, gdy skompilowany jako 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)’
Czy w ten sposób nie można używać sygnałów lambda do obsługi sygnałów? Proszę doradź.
P.S. Wiem, że mógłbym umieścić to w destruktorze, jeśli zrobiłem odpowiedni OOP, ale jestem ciekawy, czy to działa.