LoginSignup
7
5

More than 5 years have passed since last update.

UdpClientでICMPのPort Unreachableメッセージを無視する方法

Posted at

単一の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
);
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5