[英]How can I use SIGINT to break out of the wait for accept() or read()?
我目前正試圖通過使用信號(在本例中為SIGINT)來擺脫等待accept()和/或write()。 我的程序沒有按預期離開。
void sigHandler(int signal ){
printf(" Exit\n");
//x is global
x = 1;
return;
}
我從主要的剪斷我被掛斷主要是:
clientfd = accept( sockfd, (struct sockaddr *) &client_addr, (unsigned int *) &client_addr_len );
當我點擊這個並使用我的信號並返回時,我仍然停留在這行代碼上,等待用戶連接到我的套接字。 處理程序中的x是針對外部循環的這段代碼所在。
有沒有更好的方法來做我想做的事情? 另外,如果這還不夠,請告訴我。
謝謝。
編輯:
這是對信號的檢查,它回到了主要的頂部。 我認為這就是你要求的:
if ( signal( SIGINT, signalhandler ) == SIG_ERR ){
return( 1 );
}
如果使用signal
建立信號處理程序,則accept
會自動重新啟動。 使用signal
類似於使用sigaction
並將sa_flags
設置為包含SA_RESTART
。 而不是signal
,使用sigaction
並確保struct sigaction的sa_flags
字段沒有設置SA_RESTART
位。
換句話說,代替: signal( SIGINT, signalhandler )
,使用:
struct sigaction a;
a.sa_handler = signalhandler;
a.sa_flags = 0;
sigemptyset( &a.sa_mask );
sigaction( SIGINT, &a, NULL );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.