2

私はCで次のコードを持っています。

void setNonBlocking(SOCKET fd){
    int flags;
    if (-1 == (flags = fcntl(fd, F_GETFL, 0)))
        flags = 0;

    fcntl(fd, F_SETFL, flags | O_NONBLOCK);
}

int main(){

int sock;
connect(sock, .....);
setNonBlocking(sock);
....
close(sock);

//we will do something here but the application exits in/after the close operation

}

setNonBlocking 関数を使用して非ブロッキング モードでソケットを使用しています。ソケットを閉じると、アプリケーションはセグメンテーション違反などなしにすぐに終了します。setNonBlocking 関数を使用しない場合、この問題は発生しません。

この問題を起こさずにノンブロッキング ソケットを閉じるにはどうすればよいですか?

4

2 に答える 2

1

おそらく、アプリケーションは SIGPIPE を取得しています。ソケットを使用してプログラミングする場合は、通常、SIGPIPE シグナルを処理または無視する必要があります。

于 2009-12-29T10:40:26.477 に答える