diff --git a/kernel/src/net/socket/unix/addr.rs b/kernel/src/net/socket/unix/addr.rs index 44ae91613..0e8ef226d 100644 --- a/kernel/src/net/socket/unix/addr.rs +++ b/kernel/src/net/socket/unix/addr.rs @@ -54,7 +54,10 @@ impl TryFrom for UnixSocketAddr { fn try_from(value: SocketAddr) -> Result { match value { SocketAddr::Unix(unix_socket_addr) => Ok(unix_socket_addr), - _ => return_errno_with_message!(Errno::EINVAL, "Invalid unix socket addr"), + _ => return_errno_with_message!( + Errno::EINVAL, + "the socket address is not a valid UNIX domain socket address" + ), } } } diff --git a/kernel/src/net/socket/unix/stream/socket.rs b/kernel/src/net/socket/unix/stream/socket.rs index 0931fb8e7..016f54ae8 100644 --- a/kernel/src/net/socket/unix/stream/socket.rs +++ b/kernel/src/net/socket/unix/stream/socket.rs @@ -78,7 +78,9 @@ impl UnixStreamSocket { fn try_send(&self, buf: &[u8], _flags: SendRecvFlags) -> Result { match self.state.read().as_ref() { State::Connected(connected) => connected.try_write(buf), - _ => return_errno_with_message!(Errno::ENOTCONN, "the socket is not connected"), + State::Init(_) | State::Listen(_) => { + return_errno_with_message!(Errno::ENOTCONN, "the socket is not connected") + } } } @@ -93,7 +95,9 @@ impl UnixStreamSocket { fn try_recv(&self, buf: &mut [u8], _flags: SendRecvFlags) -> Result { match self.state.read().as_ref() { State::Connected(connected) => connected.try_read(buf), - _ => return_errno_with_message!(Errno::ENOTCONN, "the socket is not connected"), + State::Init(_) | State::Listen(_) => { + return_errno_with_message!(Errno::EINVAL, "the socket is not connected") + } } } @@ -135,7 +139,9 @@ impl UnixStreamSocket { fn try_accept(&self) -> Result<(Arc, SocketAddr)> { match self.state.read().as_ref() { State::Listen(listen) => listen.try_accept() as _, - _ => return_errno_with_message!(Errno::EINVAL, "the socket is not listening"), + State::Init(_) | State::Connected(_) => { + return_errno_with_message!(Errno::EINVAL, "the socket is not listening") + } } } diff --git a/test/apps/network/unix_err.c b/test/apps/network/unix_err.c index 0bdbd68b9..79df46d4e 100644 --- a/test/apps/network/unix_err.c +++ b/test/apps/network/unix_err.c @@ -247,6 +247,42 @@ FN_TEST(listen) } END_TEST() +FN_TEST(accept) +{ + TEST_ERRNO(accept(sk_unbound, NULL, NULL), EINVAL); + + TEST_ERRNO(accept(sk_bound, NULL, NULL), EINVAL); + + TEST_ERRNO(accept(sk_connected, NULL, NULL), EINVAL); + + TEST_ERRNO(accept(sk_accepted, NULL, NULL), EINVAL); +} +END_TEST() + +FN_TEST(send) +{ + char buf[1] = { 'z' }; + + TEST_ERRNO(send(sk_unbound, buf, 1, 0), ENOTCONN); + + TEST_ERRNO(send(sk_bound, buf, 1, 0), ENOTCONN); + + TEST_ERRNO(send(sk_listen, buf, 1, 0), ENOTCONN); +} +END_TEST() + +FN_TEST(recv) +{ + char buf[1] = { 'z' }; + + TEST_ERRNO(recv(sk_unbound, buf, 1, 0), EINVAL); + + TEST_ERRNO(recv(sk_bound, buf, 1, 0), EINVAL); + + TEST_ERRNO(recv(sk_listen, buf, 1, 0), EINVAL); +} +END_TEST() + FN_TEST(ns_path) { int fd;