私はmain関数を持つこのプログラムを作成しました。その中で、次のように2つのソケットを作成しています。
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)’
この方法でラムダを使用してシグナルを処理することはできませんか?お知らせ下さい。
PS適切なOOPを実行すれば、それをデストラクタに入れることができることはわかっていますが、これが機能するかどうかを知りたいと思います。