/*
* Sync read, wait for the next chunk
*/
-NTSTATUS packet_fd_read_sync(struct packet_context *ctx,
- struct timeval *timeout);
+NTSTATUS packet_fd_read_sync(struct packet_context *ctx, int timeout);
/*
* Handle an incoming packet:
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);
}
/*
#include "includes.h"
#include "../lib/util/select.h"
+#include "system/select.h"
struct packet_context {
int fd;
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);
}