2010-08-07 104 views
31

Tôi có một ổ cắm mà tôi muốn hết thời gian khi kết nối để tôi có thể hủy toàn bộ thao tác nếu nó không thể kết nối nhưng cũng muốn sử dụng makefile cho ổ cắm không yêu cầu hết thời gian chờ.Thời gian chờ kết nối socket Python

Có cách nào dễ dàng để thực hiện việc này hoặc đây có phải là một việc khó làm không?

Liệu python cho phép một thiết lập lại của thời gian chờ sau khi kết nối vì vậy mà tôi có thể sử dụng makefile và vẫn có một thời gian chờ cho kết nối ổ cắm

Trả lời

56

Bạn chỉ cần sử dụng phương pháp ổ cắm settimeout() trước khi thực hiện các connect(), xin lưu ý rằng sau khi kết nối, bạn phải settimeout(None) để đặt socket vào chế độ chặn, như vậy là bắt buộc đối với makefile. Đây là mã tôi đang sử dụng:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(10) 
sock.connect(address) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+5

Để biết thông tin, thời gian chờ phải được thể hiện trong vài giây. –

8

Nếu bạn đang sử dụng python2.6 hoặc mới hơn, nó thuận tiện để sử dụng socket.create_connection

sock = socket.create_connection(address, timeout=10) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+0

không giúp ích gì nhiều cho ổ cắm unix – Pierrot

Các vấn đề liên quan