0


1

Unix上のCでUDP recvfromをキャンセルする

Cでのネットワークプログラミングの仕組みを学び始めたばかりで、UNIX端末との間でメッセージを送信する小さなプログラムを作成しました。 私は自分のプログラムでpthreadを使用していますが、その1つは基本的には `recvfrom()`がメッセージを受信するのを待つだけです。

ただし、ユーザーがプログラムを終了することを選択した場合は、すべてのスレッドを適切に閉じることができます。 私が今設定している方法では、別のスレッドがrecvfromで待機しているスレッドをキャンセルしますが、ソケットを閉じずに残しており、すべてのメモリを解放していないため、これは良い考えではないかもしれないと心配しています割り当てられました。

`recvfrom()`呼び出しをキャンセルする方法、またはpthreadのキャンセル時に特定のルーチンを実行する方法はありますか?

ありがとう。

2 Answer


1


pthread_kill`を使用してスレッドにシグナルを送信する場合、 recvfrom() は-1を返し、 errno`を `EINTR`に設定する必要があります。その後、「application is nowing exiting」状態を確認し、正常に終了します。 。


1


別のアプローチは、スレッドIDと一致する開いた接続のリストを維持することです。 次に、スレッドをキャンセルするたびに、リストを調べてそのスレッドを見つけ、ソケットでcloseを呼び出します。