diff options
author | David Wragg <david@rabbitmq.com> | 2010-07-26 02:14:32 +0100 |
---|---|---|
committer | David Wragg <david@rabbitmq.com> | 2010-07-26 02:14:32 +0100 |
commit | 46092f1c12eb57afdf5cd18a04cd5e26d8089243 (patch) | |
tree | 157887e901625ca95eec7e242d91b6e99dd6d9d5 /librabbitmq | |
parent | c4e367b151fc4058b316554475d5704ba26f05c1 (diff) | |
parent | 47e7976d2d8af7880b89b4fdb324bc1314d3edfb (diff) | |
download | rabbitmq-c-github-ask-46092f1c12eb57afdf5cd18a04cd5e26d8089243.tar.gz |
Merge default into bug22825
Diffstat (limited to 'librabbitmq')
-rw-r--r-- | librabbitmq/amqp_socket.c | 10 | ||||
-rw-r--r-- | librabbitmq/unix/socket.h | 2 | ||||
-rw-r--r-- | librabbitmq/windows/socket.h | 8 |
3 files changed, 18 insertions, 2 deletions
diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index 6425c34..3c82e1d 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -68,6 +68,7 @@ int amqp_open_socket(char const *hostname, int sockfd, res; struct sockaddr_in addr; struct hostent *he; + int one = 1; /* used as a buffer by setsockopt below */ res = socket_init(); if (res) @@ -81,8 +82,13 @@ int amqp_open_socket(char const *hostname, addr.sin_port = htons(portnumber); addr.sin_addr.s_addr = * (uint32_t *) he->h_addr_list[0]; - sockfd = socket_socket(PF_INET, SOCK_STREAM, 0); - if (socket_connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + sockfd = socket(PF_INET, SOCK_STREAM, 0); + if (sockfd == -1) + return -encoded_socket_errno(); + + if (socket_setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one)) < 0 + || socket_connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) < 0) + { res = -encoded_socket_errno(); socket_close(sockfd); return res; diff --git a/librabbitmq/unix/socket.h b/librabbitmq/unix/socket.h index d7295c3..dff88c9 100644 --- a/librabbitmq/unix/socket.h +++ b/librabbitmq/unix/socket.h @@ -58,6 +58,7 @@ #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> +#include <netinet/tcp.h> static inline int socket_init(void) { @@ -67,6 +68,7 @@ static inline int socket_init(void) extern int socket_socket(int domain, int type, int proto); #define socket_connect connect +#define socket_setsockopt setsockopt #define socket_close close #define socket_read read #define socket_write write diff --git a/librabbitmq/windows/socket.h b/librabbitmq/windows/socket.h index bff6efc..e0a9799 100644 --- a/librabbitmq/windows/socket.h +++ b/librabbitmq/windows/socket.h @@ -59,6 +59,14 @@ extern int socket_init(void); #define socket_connect connect #define socket_close closesocket +static inline int socket_setsockopt(int sock, int level, int optname, + const void *optval, size_t optlen) +{ + /* the winsock setsockopt function has its 4th argument as a + const char * */ + return setsockopt(sock, level, optname, (const char *)optval, optlen); +} + static inline int socket_read(int sock, void *buf, size_t count) { return recv(sock, buf, count, 0); |