着信パケットをリッスンするために、提供されたエンドポイントにバインドされた UdpClient を使用しています。私のコードは次のとおりです。
...
string myIpAddress = "192.168.1.100";
int myPort = 50000;
IPEndPoint selfEndPoint = new IPEndPoint(IPAddress.Parse(myIpAddress), myPort);
IPEndPoint anySourceEndPoint = new IPEndPoint(IPAddress.Any, 0);
UdpClient receivingClient = new UdpClient();
receivingClient.Client.Bind(selfEndPoint); // Can throw.
receivingClient.Receive(ref anySourceEndPoint);
...
IP アドレスが '192.168.1.100' のインターフェイスが存在しない場合は、SocketException` がスローされます (予想どおり)。このようなインターフェイスが存在する場合、UdpClient は正常にバインドされ、着信パケットを待ちます。私の問題は次のとおりです。
Receive
でブロックしていて、インターフェイスのアドレスが利用できなくなった場合、どのように検出できますか?
たとえば、アプリケーションが実行中で、着信パケットを待機しているとします。次に、ユーザーはシステムのネットワーク インターフェイスを無効にします。アプリケーションは、パケットを受信できない場合でも、パケットを受信できると想定しています。
私がやってきたクローズはReceiveTimeout
、クライアントに を設定し、このタイムアウトが発生したときに UdpClient を再作成/バインドすることです。代替案またはその他の提案を期待しています。