acceptor_(acceptor), connection_pool_(connection_pool),
response_creator_(response_creator), acceptor_callback_(callback),
use_external_(false), watch_socket_(), defer_shutdown_(false),
- closed_(false) {
+ closed_(false), registered_(false) {
if (!tls_context) {
tcp_socket_.reset(new asiolink::TCPSocket<SocketCallback>(io_service));
} else {
if (closed_) {
return;
}
- if (use_external_) {
+ if (use_external_ && registered_) {
IfaceMgr::instance().deleteExternalSocket(tls_socket_->getNative());
closeWatchSocket();
- use_external_ = false;
+ registered_ = false;
}
tls_socket_->close();
}
request_timer_.cancel();
if (tcp_socket_) {
- if (use_external_) {
+ if (use_external_ && registered_) {
IfaceMgr::instance().deleteExternalSocket(tcp_socket_->getNative());
closeWatchSocket();
- use_external_ = false;
+ registered_ = false;
}
tcp_socket_->close();
closed_ = true;
}
request_timer_.cancel();
if (tcp_socket_) {
- if (use_external_) {
+ if (use_external_ && registered_) {
IfaceMgr::instance().deleteExternalSocket(tcp_socket_->getNative());
closeWatchSocket();
- use_external_ = false;
+ registered_ = false;
}
tcp_socket_->close();
closed_ = true;
return;
}
if (tls_socket_) {
- if (use_external_) {
+ if (use_external_ && registered_) {
IfaceMgr::instance().deleteExternalSocket(tls_socket_->getNative());
closeWatchSocket();
- use_external_ = false;
+ registered_ = false;
}
tls_socket_->close();
closed_ = true;
}
if (use_external_) {
+ registered_ = true;
auto& iface_mgr = IfaceMgr::instance();
if (tcp_socket_) {
iface_mgr.addExternalSocket(tcp_socket_->getNative(), 0);
/// @brief Flag which indicates if the connection was already closed
/// to avoid multiple close calls.
bool closed_;
+
+ /// @brief Flag which indicates if the connection file descriptor
+ /// was registered as an external socket.
+ bool registered_;
};
} // end of namespace isc::http