diff --git a/Kernel/Net/Socket.cpp b/Kernel/Net/Socket.cpp index 2832603db3..961534ba58 100644 --- a/Kernel/Net/Socket.cpp +++ b/Kernel/Net/Socket.cpp @@ -169,11 +169,9 @@ ErrorOr Socket::getsockopt(OpenFileDescription&, int level, int option, Us case SO_ERROR: { if (size < sizeof(int)) return EINVAL; - int errno; - if (so_error().is_error()) - errno = so_error().error().code(); - else - errno = 0; + int errno = 0; + if (auto const& error = so_error(); error.has_value()) + errno = error.value(); TRY(copy_to_user(static_ptr_cast(value), &errno)); size = sizeof(int); TRY(copy_to_user(value_size, &size)); diff --git a/Kernel/Net/Socket.h b/Kernel/Net/Socket.h index 0904739974..2599b3d6db 100644 --- a/Kernel/Net/Socket.h +++ b/Kernel/Net/Socket.h @@ -124,7 +124,7 @@ protected: Role m_role { Role::None }; - ErrorOr so_error() const + Optional const& so_error() const { VERIFY(m_mutex.is_exclusively_locked_by_current_thread()); return m_so_error; @@ -133,14 +133,16 @@ protected: Error set_so_error(ErrnoCode error_code) { MutexLocker locker(mutex()); - auto error = Error::from_errno(error_code); - m_so_error = error; - return error; + m_so_error = error_code; + + return Error::from_errno(error_code); } + Error set_so_error(Error error) { MutexLocker locker(mutex()); - m_so_error = error; + m_so_error = static_cast(error.code()); + return error; } @@ -178,7 +180,7 @@ private: Time m_send_timeout {}; int m_timestamp { 0 }; - ErrorOr m_so_error; + Optional m_so_error; NonnullLockRefPtrVector m_pending; };