Tôi muốn sử dụng SocketChannel
và để có thời gian chờ cho các phương pháp đọc/ghi của nó. Tôi đã cố gắng để thiết lập một thời gian chờ cho Socket sở hữu của tôi SocketChannel
như thế này:Thời gian chờ cho SocketChannel không hoạt động
channel.socket().setSoTimeout(TIMEOUT);
nhưng điều đó không làm việc. Còn có những giải pháp nào nữa ko?
Thật không may, SocketChannel không hỗ trợ phương thức setSoTimeout trực tiếp. Sử dụng nó sẽ buồn bã được bỏ qua. – casey
SocketChannel thực hiện giao diện InterruptibleChannel, có nghĩa là bạn có thể tạo một luồng riêng biệt trước khi nhập lệnh read() của bạn, có chủ đề khác đặt hẹn giờ và khi hết thời gian, nó có thể làm gián đoạn chuỗi trong đó SocketChannel của bạn đọc() cuộc gọi đang chặn. Nếu cuộc gọi read() trả về đầu tiên, bạn có thể khiến nó hủy chuỗi thời gian. –
@StevensMiller Và kênh sẽ bị đóng và đọc sẽ ném 'ClosedByInterruptException.' Không hữu ích lắm. Tôi đã nói với việc thực hiện kỳ lạ này được bắt buộc bởi hành vi của Linux. – EJP