diff options
author | Alan Antonuk <alan.antonuk@gmail.com> | 2015-04-06 23:42:17 -0700 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2015-04-19 22:09:32 -0700 |
commit | 3b775c45f7ba6a3f8b54491f3535d54efe5f89fa (patch) | |
tree | dc9dfa1a9f11520adca6502d8e9d499f8777a009 /librabbitmq/amqp_tcp_socket.c | |
parent | 8a2b35620a8cbe094bce0b6b3ed33e3c49ebc048 (diff) | |
download | rabbitmq-c-3b775c45f7ba6a3f8b54491f3535d54efe5f89fa.tar.gz |
Return NEEDREAD status from amqp_tcp_socket_recv
When tcp socket is in non-blocking mode, return
AMQP_STATUS_PRIVATE_SOCKET_NEEDREAD when socket doesn't have any data in it.
Diffstat (limited to 'librabbitmq/amqp_tcp_socket.c')
-rw-r--r-- | librabbitmq/amqp_tcp_socket.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/librabbitmq/amqp_tcp_socket.c b/librabbitmq/amqp_tcp_socket.c index 721697a..4b597ed 100644 --- a/librabbitmq/amqp_tcp_socket.c +++ b/librabbitmq/amqp_tcp_socket.c @@ -32,6 +32,10 @@ #include <stdio.h> #include <stdlib.h> +#ifdef _WIN32 +# define EWOULDBLOCK WSAEWOULDBLOCK +#endif + struct amqp_tcp_socket_t { const struct amqp_socket_class_t *klass; int sockfd; @@ -226,10 +230,17 @@ start: if (0 > ret) { self->internal_error = amqp_os_socket_error(); - if (EINTR == self->internal_error) { - goto start; - } else { - ret = AMQP_STATUS_SOCKET_ERROR; + switch (self->internal_error) { + case EINTR: + goto start; + case EWOULDBLOCK: +#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK + case EAGAIN: +#endif + ret = AMQP_PRIVATE_STATUS_SOCKET_NEEDREAD; + break; + default: + ret = AMQP_STATUS_SOCKET_ERROR; } } else if (0 == ret) { ret = AMQP_STATUS_CONNECTION_CLOSED; |