diff options
author | Sumit Bose <sbose@redhat.com> | 2010-03-17 12:52:54 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-03-17 12:05:13 -0400 |
commit | b8166736c06206b0f1484b76f1c41d2cd4f42430 (patch) | |
tree | 3a10c5314ee11caad155682ebb1d071ff2aca92e | |
parent | 4bdc6fd0bb6ec48dcfd0c2eb214b6c89f40567a3 (diff) | |
download | sssd-b8166736c06206b0f1484b76f1c41d2cd4f42430.tar.gz sssd-b8166736c06206b0f1484b76f1c41d2cd4f42430.tar.xz sssd-b8166736c06206b0f1484b76f1c41d2cd4f42430.zip |
Fixes for client communication
- catch all errors of send() and recv(), not only EAGAIN
- check if send() or recv() return EWOULDBLOCK or EINTR
- remove unused parameter from client_send() and client_recv()
- fix a debugging message
-rw-r--r-- | src/responder/common/responder_common.c | 10 | ||||
-rw-r--r-- | src/responder/common/responder_packet.c | 16 |
2 files changed, 17 insertions, 9 deletions
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c index f524afb93..48ec4bd5a 100644 --- a/src/responder/common/responder_common.c +++ b/src/responder/common/responder_common.c @@ -61,7 +61,7 @@ static int client_destructor(struct cli_ctx *ctx) return 0; } -static void client_send(struct tevent_context *ev, struct cli_ctx *cctx) +static void client_send(struct cli_ctx *cctx) { int ret; @@ -71,7 +71,7 @@ static void client_send(struct tevent_context *ev, struct cli_ctx *cctx) return; } if (ret != EOK) { - DEBUG(0, ("Failed to read request, aborting client!\n")); + DEBUG(0, ("Failed to send data, aborting client!\n")); talloc_free(cctx); return; } @@ -84,7 +84,7 @@ static void client_send(struct tevent_context *ev, struct cli_ctx *cctx) return; } -static void client_recv(struct tevent_context *ev, struct cli_ctx *cctx) +static void client_recv(struct cli_ctx *cctx) { int ret; @@ -151,11 +151,11 @@ static void client_fd_handler(struct tevent_context *ev, struct cli_ctx *cctx = talloc_get_type(ptr, struct cli_ctx); if (flags & TEVENT_FD_READ) { - client_recv(ev, cctx); + client_recv(cctx); return; } if (flags & TEVENT_FD_WRITE) { - client_send(ev, cctx); + client_send(cctx); return; } } diff --git a/src/responder/common/responder_packet.c b/src/responder/common/responder_packet.c index 6e581a3c9..d308ecd43 100644 --- a/src/responder/common/responder_packet.c +++ b/src/responder/common/responder_packet.c @@ -183,8 +183,12 @@ int sss_packet_recv(struct sss_packet *packet, int fd) errno = 0; rb = recv(fd, buf, len, 0); - if (rb == -1 && errno == EAGAIN) { - return EAGAIN; + if (rb == -1) { + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) { + return EAGAIN; + } else { + return errno; + } } if (rb == 0) { @@ -219,8 +223,12 @@ int sss_packet_send(struct sss_packet *packet, int fd) errno = 0; rb = send(fd, buf, len, 0); - if (rb == -1 && errno == EAGAIN) { - return EAGAIN; + if (rb == -1) { + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) { + return EAGAIN; + } else { + return errno; + } } if (rb == 0) { |