diff options
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/ctdbd_conn.c | 11 | ||||
-rw-r--r-- | source3/lib/packet.c | 21 |
2 files changed, 15 insertions, 17 deletions
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c index bad5285026..cfe241e644 100644 --- a/source3/lib/ctdbd_conn.c +++ b/source3/lib/ctdbd_conn.c @@ -331,13 +331,12 @@ static struct messaging_rec *ctdb_pull_messaging_rec(TALLOC_CTX *mem_ctx, static NTSTATUS ctdb_packet_fd_read_sync(struct packet_context *ctx) { - struct timeval timeout; - struct timeval *ptimeout; + int timeout = lp_ctdb_timeout(); - timeout = timeval_set(lp_ctdb_timeout(), 0); - ptimeout = (timeout.tv_sec != 0) ? &timeout : NULL; - - return packet_fd_read_sync(ctx, ptimeout); + if (timeout == 0) { + timeout = -1; + } + return packet_fd_read_sync(ctx, timeout); } /* diff --git a/source3/lib/packet.c b/source3/lib/packet.c index 1abf35c51a..cce23db551 100644 --- a/source3/lib/packet.c +++ b/source3/lib/packet.c @@ -19,6 +19,7 @@ #include "includes.h" #include "../lib/util/select.h" +#include "system/select.h" struct packet_context { int fd; @@ -102,26 +103,24 @@ NTSTATUS packet_fd_read(struct packet_context *ctx) return NT_STATUS_OK; } -NTSTATUS packet_fd_read_sync(struct packet_context *ctx, - struct timeval *timeout) +NTSTATUS packet_fd_read_sync(struct packet_context *ctx, int timeout) { - int res; - fd_set r_fds; - - FD_ZERO(&r_fds); - FD_SET(ctx->fd, &r_fds); - - res = sys_select(ctx->fd+1, &r_fds, NULL, NULL, timeout); + int res, revents; + res = poll_one_fd(ctx->fd, POLLIN|POLLHUP, timeout, &revents); if (res == 0) { - DEBUG(10, ("select timed out\n")); + DEBUG(10, ("poll timed out\n")); return NT_STATUS_IO_TIMEOUT; } if (res == -1) { - DEBUG(10, ("select returned %s\n", strerror(errno))); + DEBUG(10, ("poll returned %s\n", strerror(errno))); return map_nt_error_from_unix(errno); } + if ((revents & (POLLIN|POLLHUP|POLLERR)) == 0) { + DEBUG(10, ("socket not readable\n")); + return NT_STATUS_IO_TIMEOUT; + } return packet_fd_read(ctx); } |