Giả sử tôi có một ổ cắm:Làm thế nào để phát hiện khi một ổ cắm tăng tcp ngắt kết nối
std::shared_ptr<tcp::socket> socket(new tcp::socket(acceptor.get_io_service()));
acceptor.async_accept(*socket, std::bind(handleAccept, this, std::placeholders::_1, socket, std::ref(acceptor)));
Và tôi lưu trữ một weak_ptr để các ổ cắm cho biết trong một container. Tôi cần điều này vì tôi muốn cho phép khách hàng yêu cầu danh sách các ứng dụng khách khác, vì vậy họ có thể gửi tin nhắn cho nhau.
clients_.insert(socket); // pseudocode
Sau đó, tôi chạy một số hoạt động async
socket->async_receive(boost::asio::buffer(&(*header), sizeof(Header))
, 0
, std::bind(handleReceiveHeader, this, std::placeholders::_1, std::placeholders::_2, header, socket));
Làm thế nào để phát hiện khi kết nối được đóng để tôi có thể loại bỏ ổ cắm của tôi từ container?
clients_.erase(socket); // pseudocode
Danh sách lỗi có thể tìm thấy tại đây: http: // www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/reference/error__basic_errors.html – aCuria
Tôi nhận thấy rằng điều này thực sự hiệu quả, tôi gặp lỗi "connection_reset". Tuy nhiên, trong tài liệu tôi nhận thấy một mã lỗi khác, "connection_aborted". Có cần phải xử lý mã lỗi này không? – aCuria
Đó là một liên kết hữu ích @aCuria. Một nguồn khác của mã lỗi là tập tin 'boost/system/error_code.hpp'. Đối với lỗi "connection_aborted", tôi đã không nhìn thấy nó trong các ứng dụng của tôi, nhưng không có hại trong thử nghiệm cho nó là tốt. – kenba