diff options
Diffstat (limited to 'librabbitmq')
-rw-r--r-- | librabbitmq/amqp_connection.c | 2 | ||||
-rw-r--r-- | librabbitmq/amqp_socket.c | 10 | ||||
-rw-r--r-- | librabbitmq/unix/socket.h | 8 | ||||
-rw-r--r-- | librabbitmq/win32/socket.h | 4 |
4 files changed, 22 insertions, 2 deletions
diff --git a/librabbitmq/amqp_connection.c b/librabbitmq/amqp_connection.c index 561d496..4639b68 100644 --- a/librabbitmq/amqp_connection.c +++ b/librabbitmq/amqp_connection.c @@ -413,7 +413,7 @@ int amqp_send_frame(amqp_connection_state_t state, amqp_e32(out_frame, 3, out_frame_len); amqp_e8(out_frame, out_frame_len + HEADER_SIZE, AMQP_FRAME_END); res = send(state->sockfd, out_frame, - out_frame_len + HEADER_SIZE + FOOTER_SIZE, 0); + out_frame_len + HEADER_SIZE + FOOTER_SIZE, MSG_NOSIGNAL); } if (res < 0) diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index 6b9486c..2034f17 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -66,6 +66,14 @@ int amqp_open_socket(char const *hostname, if (sockfd == -1) return -amqp_socket_error(); +#ifdef DISABLE_SIGPIPE_WITH_SETSOCKOPT + if (0 != amqp_socket_setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &one, + sizeof(one))) + { + return -amqp_socket_error(); + } +#endif + if (amqp_socket_setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one)) < 0 || connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) < 0) @@ -83,7 +91,7 @@ int amqp_send_header(amqp_connection_state_t state) { AMQP_PROTOCOL_VERSION_MAJOR, AMQP_PROTOCOL_VERSION_MINOR, AMQP_PROTOCOL_VERSION_REVISION }; - return send(state->sockfd, (void *)header, 8, 0); + return send(state->sockfd, (void *)header, 8, MSG_NOSIGNAL); } static amqp_bytes_t sasl_method_name(amqp_sasl_method_enum method) { diff --git a/librabbitmq/unix/socket.h b/librabbitmq/unix/socket.h index ff6fa73..d57cb7b 100644 --- a/librabbitmq/unix/socket.h +++ b/librabbitmq/unix/socket.h @@ -55,4 +55,12 @@ amqp_socket_error(void); #define amqp_socket_close close #define amqp_socket_writev writev +#ifndef MSG_NOSIGNAL +# define MSG_NOSIGNAL 0x0 +#endif + +#if defined(SO_NOSIGPIPE) && !defined(MSG_NOSIGNAL) +# define DISABLE_SIGPIPE_WITH_SETSOCKOPT +#endif + #endif diff --git a/librabbitmq/win32/socket.h b/librabbitmq/win32/socket.h index 4572410..3b9c452 100644 --- a/librabbitmq/win32/socket.h +++ b/librabbitmq/win32/socket.h @@ -57,4 +57,8 @@ amqp_socket_writev(int sock, struct iovec *iov, int nvecs); int amqp_socket_error(void); +#ifndef MSG_NOSIGNAL +# define MSG_NOSIGNAL 0x0 +#endif + #endif |