.NET 3.x Зависает socket.ReceiveFrom из-за чего не могу прервать поток - C#
Формулировка задачи:
Доброго времени суток!
При плохой связи после отправки запроса поток подвисает, т.к. socket.ReceiveFrom() не получает ответа из сети. Т.е., поток бесконечно ждёт ответа, которого уже и быть-то не может. Ниже этот код:
При этом, параметры таймаута сокету присвоить не получается (вызывает исключение) и не получается прервать поток - Abort() не работает, а Join() зависает вместе с потоком.
Кто что может подсказать?
П.С.: WinCE 5.0, .NET CF 3.5.
byte[] ipByte = { 192, 168, 1, 2 };
IPAddress ip = new IPAddress(ipByte);
IPEndPoint ipep = new IPEndPoint(ip, 123);
EndPoint ep = new IPEndPoint(ip, 123);
byte[] ntpData = new byte[48];
ntpData[0] = 0x1B;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
socket.SendTo(ntpData, 0, ntpData.Length, SocketFlags.None, ep);
socket.ReceiveFrom(ntpData, SocketFlags.None, ref ep);
}Решение задачи: «.NET 3.x Зависает socket.ReceiveFrom из-за чего не могу прервать поток»
textual
Листинг программы
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
socket.SendTo(ntpData, 0, ntpData.Length, SocketFlags.None, ep);
while (!cancelReceive) // cancelReceive - флаг прерывания ожидания
{
if (socket.Avaliable != 0)
{
socket.ReceiveFrom(ntpData, SocketFlags.None, ref ep);
break;
}
else
Thread.Sleep(50);
}
}