From: "Günther Noack" <gnoack3000@gmail.com>
To: Alejandro Colomar <alx+linux-man@kernel.org>
Cc: "Kuniyuki Iwashima" <kuniyu@google.com>,
"Günther Noack" <gnoack3000@gmail.com>,
linux-man@vger.kernel.org
Subject: [PATCH v2 6/6] man/man7/unix.7: ERRORS: Document EACCES, EAGAIN, EMSGSIZE, ENOSPC, and EPERM
Date: Tue, 3 Nov 2026 21:21:36 +0100 [thread overview]
Message-ID: <20261103202136.13574-7-gnoack3000@gmail.com> (raw)
In-Reply-To: <20261103202136.13574-1-gnoack3000@gmail.com>
These are all returned directly from linux.git net/unix/af_unix.c:
EACCES
unix_find_bsd() checks path_permission(&path, MAY_WRITE) on the
socket file of the remote address. The rule was already described
in prose, but the error was not listed.
EAGAIN
unix_stream_connect() returns -EAGAIN when the listener's backlog
is full and the socket is nonblocking (there is no EINPROGRESS for
AF_UNIX). unix_dgram_sendmsg() returns -EAGAIN when the receiver's
queue is full and the send would block.
EMSGSIZE
unix_dgram_sendmsg() fails if 'len > sk->sk_sndbuf - 32'. This is
the limit described in "Sockets API".
ENOSPC
unix_autobind() fails when all 2^20 autobind names are taken.
EPERM
unix_dgram_connect() and unix_dgram_sendmsg() fail if
!unix_may_send(), that is, if the target datagram socket is
connected to a socket other than the caller's.
This is not something that the remote end normally does,
but it's a possible corner case.
Cc: Kuniyuki Iwashima <kuniyu@google.com>
Assisted-by: LLM
Signed-off-by: Günther Noack <gnoack3000@gmail.com>
---
Notes:
Verified in code. Kept LLM wording, which seemed OK.
Remark:
The case where the remote end is connected to a different socket is
obscure, but still possible with Unix Domain Sockets, when a program
first bind(2)s to a name, and then connect(2)s to another name. Then
that socket can be discovered by another process through the bound
name, but sending a dgram fails if the sender is not the one that that
socket has connected to.
man/man7/unix.7 | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/man/man7/unix.7 b/man/man7/unix.7
index 762bf0d1fe08..2163a91514b9 100644
--- a/man/man7/unix.7
+++ b/man/man7/unix.7
@@ -645,9 +645,24 @@ .SS Ioctls
.\" and it may well change, probably best not to document this now.
.SH ERRORS
.TP
+.B EACCES
+Write permission is denied on the socket file
+specified as the remote address to
+.BR connect (2)
+or
+.BR sendto (2)
+(see "Pathname socket ownership and permissions", above).
+.TP
.B EADDRINUSE
-The specified local address is already in use or the filesystem socket
-object already exists.
+The specified local address is already in use
+or the file already exists.
+.TP
+.B EAGAIN
+The socket is nonblocking, and either
+.BR connect (2)
+was called on a stream or sequenced-packet socket
+and the backlog of the listening socket is full,
+or a datagram was sent to a socket whose receive queue is full.
.TP
.B EBADF
This error can occur for
@@ -684,6 +699,11 @@ .SH ERRORS
called on an already connected socket or a target address was
specified on a connected socket.
.TP
+.B EMSGSIZE
+The datagram to be sent is larger than the limit imposed by the
+.B SO_SNDBUF
+socket option (see "Sockets API", above).
+.TP
.B ENFILE
The system-wide limit on the total number of open files has been reached.
.TP
@@ -695,6 +715,11 @@ .SH ERRORS
.B ENOMEM
Out of memory.
.TP
+.B ENOSPC
+The socket was to be autobound,
+but all autobind addresses are in use
+(see "Autobind feature", above).
+.TP
.B ENOTCONN
Socket operation needs a target address, but the socket is not connected.
.TP
@@ -706,6 +731,13 @@ .SH ERRORS
The sender passed invalid credentials in the
.IR "struct ucred" .
.TP
+.B EPERM
+.BR connect (2)
+or
+.BR sendto (2)
+specified a datagram socket as the remote address,
+but that socket is connected to a different socket.
+.TP
.B EPIPE
Remote socket was closed on a stream socket.
If enabled, a
--
2.56.0
prev parent reply other threads:[~2026-11-03 20:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 20:21 [PATCH v2 0/6] {unix,socket,bind}.7: General Unix Domain Socket fixes Günther Noack
2026-11-03 20:21 ` [PATCH v2 1/6] man/man7/socket.7: SO_PEEK_OFF: This option is no longer specific to unix(7) Günther Noack
2026-11-03 20:21 ` [PATCH v2 2/6] man/man7/unix.7: SO_PEERCRED: Also works for SOCK_SEQPACKET Günther Noack
2026-11-03 20:21 ` [PATCH v2 3/6] man/man7/unix.7: SIOCINQ: Document behavior " Günther Noack
2026-11-03 20:21 ` [PATCH v2 4/6] man/man7/unix.7: Explain Abstract UDS scoping to the network namespace Günther Noack
2026-11-03 20:21 ` [PATCH v2 5/6] man/man2/bind.2: ERRORS: EACCES: Write permission on the directory is required Günther Noack
2026-11-03 20:21 ` Günther Noack [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261103202136.13574-7-gnoack3000@gmail.com \
--to=gnoack3000@gmail.com \
--cc=alx+linux-man@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-man@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox