私はSIGALRMとSIGPOLLシグナルの両方を非同期で処理しなければなりません。私は次のことを考え出した。私はこれが複数の信号を非同期的に扱う正しい方法であるかどうかはわかりません。SIGALRMとSIGPOLLを非同期モードで使用するには?
void handle_alarm(int sig) {
printf("Timeout!\n");
printf("?\n");
}
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGPOLL);
sigaddset(&sa.sa_mask, SIGALRM);
sa.sa_handler = &handle_alarm;
//sa.sa_handler = &handle_sigpoll;
sa.sa_flags = 0;
if (sigaction(SIGPOLL, &sa, 0) == -1) {
perror(0);
printf("here\n");
exit(1);
}
if (sigaction(SIGALRM, &sa, 0) == -1) {
perror(0);
printf("here\n");
exit(1);
}
// Setup UDP Socket
sock_id = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_id<0)
perror("Error opening Socket\n");
fcntl(sock_id,F_SETOWN,getpid());
fcntl(sock_id, F_SETFL, FASYNC);
alarm(7);
コードを改善するにはどうすればよいですか?私の質問の詳細を簡潔にして申し訳ありません。
信号よりも「選択」のほうが良いでしょう。 – zwol