s4-lib/socket: Return the original EMSGSIZE when sendto() and setsockopt() both fail
authorAndrew Bartlett <abartlet@samba.org>
Mon, 4 Mar 2013 03:07:38 +0000 (14:07 +1100)
committerStefan Metzmacher <metze@samba.org>
Mon, 4 Mar 2013 07:38:23 +0000 (08:38 +0100)
This ensures that should we be unable to increase the socket size, we return an
error that the application layer above might expect and be able to make
as reasonable response to (such as switching to a stream-based transport).

This fixes up c692bb02b039ae8fef6ba968fd13b36ad7d62a72.

As suggested by metze in https://bugzilla.samba.org/show_bug.cgi?id=9697#c4

Andrew Bartlett

Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/lib/socket/socket_unix.c

index 049e5707c87b799c1511f94e9bcd72297e333e56..0774b12b93e43a08418a2d177a16c406ce5d2e90 100644 (file)
@@ -295,7 +295,7 @@ static NTSTATUS unixdom_sendto(struct socket_context *sock,
                if (setsockopt(sock->fd, SOL_SOCKET, SO_SNDBUF, &bufsize,
                               sizeof(bufsize)) == -1)
                {
-                       return map_nt_error_from_unix_common(errno);
+                       return map_nt_error_from_unix_common(EMSGSIZE);
                }
                len = sendto(sock->fd, blob->data, blob->length, 0, sa, sa_len);
        }