1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

tsocket_bsd: Attempt to increase the SO_SNDBUF if we get EMSGSIZE in sendto()

This matches what was done for lib/socket/socket_unix.c in
c692bb02b039ae8fef6ba968fd13b36ad7d62a72.

(and is based on that patch by Landon Fuller <landonf@bikemonkey.org>)

Andrew Bartlett

Reviewed-by: Stefan Metzmacher <metze@samba.org>

Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Mon Mar  4 11:15:35 CET 2013 on sn-devel-104
This commit is contained in:
Andrew Bartlett 2013-03-04 14:06:14 +11:00 committed by Stefan Metzmacher
parent 50b42d1c5b
commit 70e1b6185e

View File

@ -1102,6 +1102,32 @@ static void tdgram_bsd_sendto_handler(void *private_data)
/* retry later */
return;
}
if (err == EMSGSIZE) {
/* round up in 1K increments */
int bufsize = ((state->len + 1023) & (~1023));
ret = setsockopt(bsds->fd, SOL_SOCKET, SO_SNDBUF, &bufsize,
sizeof(bufsize));
if (ret == 0) {
/*
* We do the rety here, rather then via the
* handler, as we only want to retry once for
* this condition, so if there is a mismatch
* between what setsockopt() accepts and what can
* actually be sent, we do not end up in a
* loop.
*/
ret = sendto(bsds->fd, state->buf, state->len,
0, sa, sa_socklen);
err = tsocket_bsd_error_from_errno(ret, errno, &retry);
if (retry) { /* retry later */
return;
}
}
}
if (tevent_req_error(req, err)) {
return;
}