Mercurial > dovecot > core-2.2
changeset 20351:f3e249261abd
lib: Implemented net_set_send_buffer_size() and net_set_recv_buffer_size().
These functions allow manipulating the kernel socket buffer sizes for a socket file descriptor.
author | Stephan Bosch <stephan@dovecot.fi> |
---|---|
date | Fri, 20 May 2016 00:02:49 +0200 |
parents | 08038ef67fbd |
children | ebdd1bc4dc16 |
files | src/lib/net.c src/lib/net.h |
diffstat | 2 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/net.c Thu May 19 23:42:14 2016 +0200 +++ b/src/lib/net.c Fri May 20 00:02:49 2016 +0200 @@ -374,6 +374,30 @@ #endif } +int net_set_send_buffer_size(int fd, size_t size) +{ + int opt; + + if (size > INT_MAX) { + errno = EINVAL; + return -1; + } + opt = (int)size; + return setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)); +} + +int net_set_recv_buffer_size(int fd, size_t size) +{ + int opt; + + if (size > INT_MAX) { + errno = EINVAL; + return -1; + } + opt = (int)size; + return setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt)); +} + void net_get_ip_any4(struct ip_addr *ip) { ip->family = AF_INET;
--- a/src/lib/net.h Thu May 19 23:42:14 2016 +0200 +++ b/src/lib/net.h Fri May 20 00:02:49 2016 +0200 @@ -93,6 +93,10 @@ Returns 0 if ok, -1 if failed. */ int net_set_cork(int fd, bool cork) ATTR_NOWARN_UNUSED_RESULT; +/* Set socket kernel buffer sizes */ +int net_set_send_buffer_size(int fd, size_t size); +int net_set_recv_buffer_size(int fd, size_t size); + /* Set IP to contain INADDR_ANY for IPv4 or IPv6. The IPv6 any address may include IPv4 depending on the system (Linux yes, BSD no). */ void net_get_ip_any4(struct ip_addr *ip);