summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2010-03-17 12:52:54 +0100
committerStephen Gallagher <sgallagh@redhat.com>2010-03-17 12:03:58 -0400
commitcfff837d831b6f4e12dcc87c1d59789fe08597a6 (patch)
treed9a0b99adb7b7100dba6d564dd14be6e96f40dbe
parent8834e6fe4f89d7b0227377619d96d455e1f28ebb (diff)
downloadsssd-cfff837d831b6f4e12dcc87c1d59789fe08597a6.tar.gz
sssd-cfff837d831b6f4e12dcc87c1d59789fe08597a6.tar.xz
sssd-cfff837d831b6f4e12dcc87c1d59789fe08597a6.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.c10
-rw-r--r--src/responder/common/responder_packet.c16
2 files changed, 17 insertions, 9 deletions
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
index 156f0c84a..315eb7354 100644
--- a/src/responder/common/responder_common.c
+++ b/src/responder/common/responder_common.c
@@ -65,7 +65,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;
@@ -75,7 +75,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;
}
@@ -88,7 +88,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;
@@ -277,11 +277,11 @@ static void client_fd_handler(struct tevent_context *ev,
}
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) {