我試圖用信號處理程序實現一個簡單的服務器/客戶端。sigset_t在這種情況下很有用嗎?
我的信號只使用會的sigaction(SIG ...... & SIG,NULL),其中:
sig.sa_sigaction = &closeSig;
sig.sa_flags = SA_SIGINFO;
void closeSig{
send(ds_sock,"close",1024,0);
close(ds_sock);
exit(1);
}
如果服務器(或客戶端)接收到 「關閉」,它只是關閉連接。
在這種情況下,使用sigset_t是否有用,並在其中添加我想要處理的所有信號,然後像使用sigaction那樣使用sigaction,而不是僅使用e sigaction?
如果它有用,你能解釋我的原因嗎?我有一個測試版程序,它在服務器上使用sigset,但它不在客戶端上。謝謝!
編輯:我剛剛發現,服務器也使用sigprocmask與解除阻止。如果我不想使用它,並且我希望所有信號都暢通無阻,並且立即啓動它們的處理程序,我不必使用sigset,對吧?謝謝!
對不起,但我無法發佈代碼。如果你能幫助我,那很好,如果你不能,謝謝!
您的send()調用沒有意義;它從一個5字節的數組發送1024個字節。我希望這只是一個例子。 – Myria 2014-10-22 04:10:11
@Myria是這只是一個例子,它是早上6點,我仍在學習:( 編輯:無論如何,我不認爲它是完全錯誤的,我的意思是,我發送更多的字節,然後必要的,但這不應該中斷任何事情吧? – testermaster 2014-10-22 04:12:51
讀取數組的末尾有未定義的效果,它可能什麼也不做,它可能會導致核心轉儲,或者可能會做其他事情。 – 2014-10-22 04:26:37