Trên thực tế, dường như UdpClient
bị phá vỡ khi nói đến timeout. Tôi đã cố gắng để viết một máy chủ với một sợi chỉ chứa một Receive nhận dữ liệu và thêm nó vào một hàng đợi. Tôi đã làm điều này trong nhiều năm với TCP. Kỳ vọng là vòng lặp chặn tại điểm nhận cho đến khi một thông điệp đến từ một người yêu cầu. Tuy nhiên, mặc dù đặt thời gian chờ thành vô cùng:
_server.Client.ReceiveTimeout = 0; //block waiting for connections
_server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
thời gian chờ sau khoảng 3 phút.
Cách khắc phục duy nhất tôi tìm thấy là bắt ngoại lệ hết thời gian chờ và tiếp tục vòng lặp. Điều này ẩn lỗi Microsoft nhưng không trả lời được câu hỏi cơ bản về lý do tại sao điều này xảy ra.
Cảm ơn bạn đã trả lời. – Jack
Đây là một thời gian dài trước đây! Điều đó có vẻ ổn. WaitOne cũng trả về kết quả bạn có thể sử dụng để xác định xem kết quả đã hết thời gian chưa. – weston