簡體   English   中英

我怎樣才能使用SIGINT來擺脫wait()或read()的等待?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM