2012-03-25 20 views
5

Tôi đang sử dụng fsockopen() để gửi dữ liệu thông qua giao thức TCP đến một máy chủ từ xa:Detect kết nối hủy bỏ vào một ổ cắm mở bởi fsockopen()

$s = fsockopen($host, $port); 
fwrite($s, $data); 
fclose($s); 

Làm thế nào tôi có thể phát hiện sau đó nếu kết nối bị đóng lại (với một FIN) hoặc bị hủy bỏ (với RST) bởi máy chủ từ xa?

+1

Đáng ngại, bạn không thể (AFAIK). Bạn có thể phát hiện xem socket đã được đóng * hay * bị hủy bỏ trước cuộc gọi của bạn 'fclose()' với 'feof()', nhưng bạn không thể xác định được nó là gì. Mặc dù tôi tự hỏi làm thế nào hữu ích thông tin này sẽ được, sau khi tất cả một ổ cắm chết là một ổ cắm chết, không có vấn đề gì xảy ra với nó. – DaveRandom

Trả lời

1

Theo tài liệu socket_last_error()socket_send() có thể hữu ích cho bạn:

 
socket_send() returns the number of bytes sent, or FALSE on error. 
socket_last_error() returns the last error on the socket 

Tôi tin rằng, đó là PHP có thể phát hiện nếu kết nối bị đóng cửa, tuy nhiên không chắc chắn về điều này.

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