diff options
Diffstat (limited to 'Kernel')
-rw-r--r-- | Kernel/Net/Socket.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Kernel/Net/Socket.cpp b/Kernel/Net/Socket.cpp index 6f89a610a7..7a46ba1d0f 100644 --- a/Kernel/Net/Socket.cpp +++ b/Kernel/Net/Socket.cpp @@ -256,12 +256,14 @@ ErrorOr<void> Socket::shutdown(int how) return set_so_error(ENOTCONN); if (m_role == Role::Listener) return set_so_error(ENOTCONN); - if (!m_shut_down_for_writing && (how & SHUT_WR)) + if (!m_shut_down_for_writing && (how == SHUT_WR || how == SHUT_RDWR)) { shut_down_for_writing(); - if (!m_shut_down_for_reading && (how & SHUT_RD)) + m_shut_down_for_writing = true; + } + if (!m_shut_down_for_reading && (how == SHUT_RD || how == SHUT_RDWR)) { shut_down_for_reading(); - m_shut_down_for_reading |= (how & SHUT_RD) != 0; - m_shut_down_for_writing |= (how & SHUT_WR) != 0; + m_shut_down_for_reading = true; + } return {}; } |