开发者

C# UDP Socket taking time to send data to unknown IP

i am sending data to UDP socket using this code

Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(obj.destAddress), obj.destPort);

byte[] buf = new byte[obj.length];
Array.Copy((byte[])obj.data, buf, obj.length);
int n = udpClient.SendTo(buf, ipEndPoint);
udpClient.Close();

this code works fine when IP exists in current network, but it takes 3-5 seconds when I send data to unknown IP address. This causes main application to hang for 3-5 seconds.. What could be the 开发者_开发百科reason behind this problem..


Your IP stack cannot send a UDP packet until it the MAC address is known. The is done with the ARP protocol. The IP stack sends an ARP query and times out waiting for the ARP response. When finished the SendTo returns.

When you send a UDP packet to the internet the MAC address of the gateway is necessary. Since the gateway is usually available the timeout does not appear since your IP stack was able to send to the gateway indenpendent of if the destination is available or not.

You can try to set a socket option to operate asynchronously.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜