* GNU General Public License for more details.
*/
+#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/socket.h>
struct pollfd pfd = { .fd = fd };
pfd.events = write ? POLLOUT : POLLIN;
- poll(&pfd, 1, 0);
+ poll(&pfd, 1, -1);
}
static int writev_retry(int fd, struct iovec *iov, int iov_len, int sock_fd)
iov.iov_base = (char *)ctx->msgbuf.data + sizeof(hdrbuf.data);
iov.iov_len = blob_len(ctx->msgbuf.data);
- if (iov.iov_len > 0 && !recv_retry(ctx->sock.fd, &iov, true, NULL))
+ if (iov.iov_len > 0 &&
+ recv_retry(ctx->sock.fd, &iov, true, NULL) <= 0)
return false;
return true;
.events = POLLIN | POLLERR,
};
- poll(&pfd, 1, timeout);
+ poll(&pfd, 1, timeout ? timeout : -1);
ubus_handle_data(&ctx->sock, ULOOP_READ);
}