私は、私はこのように、二つのソケットを作成していたの内側に、主な機能を持っているこのプログラムを書かれている:AutoとLambdaを使ってSignalを処理するには?
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.私は適切なOOPをしたら、デストラクタにそれを置くことができることを知っていますが、これがうまくいくかどうかを知りたいのです。