aboutsummaryrefslogtreecommitdiff
path: root/pflocal/socket.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-07-05 17:09:58 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-07-05 17:09:58 +0200
commit9b64495c6cd22cd65f118c18a36b2de7cbde4344 (patch)
tree4ea487ab78ca73da32c50fa48bc3be546213551f /pflocal/socket.c
parent414f6c35a62a7e72f40c39089a9952913a7eeb90 (diff)
downloadhurd-9b64495c6cd22cd65f118c18a36b2de7cbde4344.tar.gz
hurd-9b64495c6cd22cd65f118c18a36b2de7cbde4344.tar.bz2
hurd-9b64495c6cd22cd65f118c18a36b2de7cbde4344.zip
pflocal: support SO_SNDBUF for unconnected sockets
We can store the requested value, to be applied when we connect the sockets. * pflocal/sock.h (struct sock): Add req_write_limit field. * pflocal/sock.c (sock_create): Initialize req_write_limit field to 0. (sock_connect): Bump the write_limit of the write pipe to the req_write_limit value. (sock_shutdown): Update req_write_limit from the write_limit of the write pipe. * pflocal/socket.c (S_socket_getopt, S_socket_setopt): When write_pipe is NULL, use req_write_limit.
Diffstat (limited to 'pflocal/socket.c')
-rw-r--r--pflocal/socket.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/pflocal/socket.c b/pflocal/socket.c
index 8f90da2d..89444370 100644
--- a/pflocal/socket.c
+++ b/pflocal/socket.c
@@ -479,12 +479,10 @@ S_socket_getopt (struct sock_user *user,
break;
}
pipe = sock->write_pipe;
- if (!pipe)
- {
- ret = ENOTCONN;
- break;
- }
- *(int *)*value = pipe->write_limit;
+ if (pipe)
+ *(int *)*value = pipe->write_limit;
+ else
+ *(int *)*value = sock->req_write_limit;
*value_len = sizeof (int);
break;
case SO_ERROR:
@@ -594,7 +592,7 @@ S_socket_setopt (struct sock_user *user,
pipe = sock->write_pipe;
if (!pipe)
{
- ret = ENOTCONN;
+ sock->req_write_limit = new;
break;
}