summaryrefslogtreecommitdiff
path: root/librabbitmq
diff options
context:
space:
mode:
authorDavid Wragg <david@rabbitmq.com>2010-07-26 02:14:32 +0100
committerDavid Wragg <david@rabbitmq.com>2010-07-26 02:14:32 +0100
commit46092f1c12eb57afdf5cd18a04cd5e26d8089243 (patch)
tree157887e901625ca95eec7e242d91b6e99dd6d9d5 /librabbitmq
parentc4e367b151fc4058b316554475d5704ba26f05c1 (diff)
parent47e7976d2d8af7880b89b4fdb324bc1314d3edfb (diff)
downloadrabbitmq-c-github-ask-46092f1c12eb57afdf5cd18a04cd5e26d8089243.tar.gz
Merge default into bug22825
Diffstat (limited to 'librabbitmq')
-rw-r--r--librabbitmq/amqp_socket.c10
-rw-r--r--librabbitmq/unix/socket.h2
-rw-r--r--librabbitmq/windows/socket.h8
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);