From f7b933f570545def0d654b9408c92b82ac0e54f4 Mon Sep 17 00:00:00 2001 From: Juha Reunanen Date: Mon, 6 Jul 2015 18:05:31 +0300 Subject: [PATCH] LIBZMQ-195 allow explicitly setting sndbuf and rcvbuf to 0 (see https://support.microsoft.com/en-us/kb/201213) --- src/options.cpp | 4 ++-- src/pgm_socket.cpp | 4 ++-- src/socks_connecter.cpp | 4 ++-- src/tcp_connecter.cpp | 4 ++-- src/tcp_listener.cpp | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/options.cpp b/src/options.cpp index 6742f92e..da86c3fb 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -41,8 +41,8 @@ zmq::options_t::options_t () : rate (100), recovery_ivl (10000), multicast_hops (1), - sndbuf (0), - rcvbuf (0), + sndbuf (-1), + rcvbuf (-1), tos (0), type (-1), linger (-1), diff --git a/src/pgm_socket.cpp b/src/pgm_socket.cpp index 02655797..2557c668 100644 --- a/src/pgm_socket.cpp +++ b/src/pgm_socket.cpp @@ -196,14 +196,14 @@ int zmq::pgm_socket_t::init (bool udp_encapsulation_, const char *network_) { const int rcvbuf = (int) options.rcvbuf; - if (rcvbuf) { + if (rcvbuf >= 0) { if (!pgm_setsockopt (sock, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof (rcvbuf))) goto err_abort; } const int sndbuf = (int) options.sndbuf; - if (sndbuf) { + if (sndbuf >= 0) { if (!pgm_setsockopt (sock, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof (sndbuf))) goto err_abort; diff --git a/src/socks_connecter.cpp b/src/socks_connecter.cpp index bdc435ec..fb69ea7d 100644 --- a/src/socks_connecter.cpp +++ b/src/socks_connecter.cpp @@ -340,9 +340,9 @@ int zmq::socks_connecter_t::connect_to_proxy () unblock_socket (s); // Set the socket buffer limits for the underlying socket. - if (options.sndbuf != 0) + if (options.sndbuf >= 0) set_tcp_send_buffer (s, options.sndbuf); - if (options.rcvbuf != 0) + if (options.rcvbuf >= 0) set_tcp_receive_buffer (s, options.rcvbuf); // Set the IP Type-Of-Service for the underlying socket diff --git a/src/tcp_connecter.cpp b/src/tcp_connecter.cpp index 17239a74..b328d487 100644 --- a/src/tcp_connecter.cpp +++ b/src/tcp_connecter.cpp @@ -258,9 +258,9 @@ int zmq::tcp_connecter_t::open () unblock_socket (s); // Set the socket buffer limits for the underlying socket. - if (options.sndbuf != 0) + if (options.sndbuf >= 0) set_tcp_send_buffer (s, options.sndbuf); - if (options.rcvbuf != 0) + if (options.rcvbuf >= 0) set_tcp_receive_buffer (s, options.rcvbuf); // Set the IP Type-Of-Service for the underlying socket diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp index 26cc3f0f..1b37a3b5 100644 --- a/src/tcp_listener.cpp +++ b/src/tcp_listener.cpp @@ -207,9 +207,9 @@ int zmq::tcp_listener_t::set_address (const char *addr_) set_ip_type_of_service (s, options.tos); // Set the socket buffer limits for the underlying socket. - if (options.sndbuf != 0) + if (options.sndbuf >= 0) set_tcp_send_buffer (s, options.sndbuf); - if (options.rcvbuf != 0) + if (options.rcvbuf >= 0) set_tcp_receive_buffer (s, options.rcvbuf); // Allow reusing of the address.