Ho scritto questo programma che ha una funzione principale, al cui interno, sto creando due prese, in questo modo:Utilizzo di Auto e Lambda per gestire il segnale?
int sockfd1 = socket(AF_INET, SOCK_STREAM, 0);
int sockfd2 = socket(AF_INET, SOCK_STREAM, 0);
Ora faccio alcune cose con loro, e quando l'utente preme CTRL + C per terminare il processo, voglio per assicurarsi che le prese di chiudere correttamente, in modo da fare questo:
auto sigTermHandler = [&] (int param) { close(sockfd1); close(sockfd2); };
signal(SIGTERM, sigTermHandler);
Ma questo getta il seguente errore di compilazione quando compilato come 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)’
Non è possibile utilizzare lambda in questo modo per gestire i segnali? Si prega di avvisare.
P.S. So che potrei metterlo in un distruttore, se avessi fatto l'OOP corretto, ma sono curioso di vedere se funziona.