UdpClientでICMPのPort Unreachableメッセージを無視する方法
単一のUdpClientインスタンスで非同期に受信待ちしながらデータを送信する、簡易チャット中継サーバのようなシステムを作りました。 すると、閉じたポートにパケットを送信した際にUdpClientがICMPのPort Unreachableメッセージを受け取って例外を吐いてしまいます。
UDPなんだからパケットが届いたかどうかなんて気にせず投げっ放しにしたいなーと思って調べたところ、Stack Overflowにズバリ回答がありました。
asynchronous - C# Async UDP listener SocketException - Stack Overflow
UdpClient.Clientプロパティ(Socketクラス)のIOControlメソッドで設定すると例外が飛んで来なくなります。
public const int SIO_UDP_CONNRESET = -1744830452; var client = new UdpClient(endpoint); client.Client.IOControl( (IOControlCode)SIO_UDP_CONNRESET, new byte[] { 0, 0, 0, 0 }, null );