Immediately close non-connected sockets.

This commit is contained in:
levlam 2021-12-16 23:38:44 +03:00
parent d7e559b45c
commit 957670aa0d

View File

@ -78,11 +78,13 @@ class SocketFdImpl final : private Iocp::Callback {
} }
void close() { void close() {
if (!is_write_waiting_) { if (!is_write_waiting_ && is_connected_) {
VLOG(fd) << get_native_fd() << " will close after ongoing write"; VLOG(fd) << get_native_fd() << " will close after ongoing write";
auto lock = lock_.lock(); auto lock = lock_.lock();
need_close_after_write_ = true; if (!is_write_waiting_) {
return; need_close_after_write_ = true;
return;
}
} }
notify_iocp_close(); notify_iocp_close();
} }
@ -168,7 +170,7 @@ class SocketFdImpl final : private Iocp::Callback {
bool close_flag_{false}; bool close_flag_{false};
bool need_close_after_write_{false}; bool need_close_after_write_{false};
bool is_connected_{false}; std::atomic<bool> is_connected_{false};
bool is_read_active_{false}; bool is_read_active_{false};
ChainBufferWriter input_writer_; ChainBufferWriter input_writer_;
ChainBufferReader input_reader_ = input_writer_.extract_reader(); ChainBufferReader input_reader_ = input_writer_.extract_reader();