diff options
| author | Stefan Metzmacher <metze@samba.org> | 2020-06-08 14:21:25 +0200 |
|---|---|---|
| committer | Stefan Metzmacher <metze@samba.org> | 2020-06-19 22:59:00 +0200 |
| commit | f317ebcdcdd626ed9e06de2eb60031306994c803 (patch) | |
| tree | b9004de1af9a4e645da631f6ebf905967207d9c6 | |
| parent | c95b7cb1d7b9348472276edceff71889aa676d25 (diff) | |
| download | socket_wrapper-f317ebcdcdd626ed9e06de2eb60031306994c803.tar.gz socket_wrapper-f317ebcdcdd626ed9e06de2eb60031306994c803.tar.xz socket_wrapper-f317ebcdcdd626ed9e06de2eb60031306994c803.zip | |
socket_wrapper.c: let swrap_vioctl() handle SIOCOUTQ/TIOCOUTQ/FIONWRITE explicitly
They are used to ask for the number of unacked bytes in the send queue,
with AF_UNIX sockets get strange result, on linux 5.3 I get more bytes
reported than I sent into the socket. All bytes reach the destination
directly, so we can just always report 0 unacked bytes.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897
Signed-off-by: Stefan Metzmacher <metze@samba.org>
| -rw-r--r-- | src/socket_wrapper.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index e7a7a8a..333bdd4 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -4660,6 +4660,24 @@ static int swrap_vioctl(int s, unsigned long int r, va_list va) swrap_pcap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0); } break; +#ifdef FIONWRITE + case FIONWRITE: + /* this is FreeBSD */ + FALL_THROUGH; /* to TIOCOUTQ */ +#endif /* FIONWRITE */ + case TIOCOUTQ: /* same as SIOCOUTQ on Linux */ + /* + * This may return more bytes then the application + * sent into the socket, for tcp it should + * return the number of unacked bytes. + * + * On AF_UNIX, all bytes are immediately acked! + */ + if (rc == 0) { + value_ptr = ((int *)va_arg(ap, int *)); + *value_ptr = 0; + } + break; } va_end(ap); |
