From ad9b5a387df86c3fa1bdf733b913f5bf4b751f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Thu, 15 Jan 2015 12:59:18 +0100 Subject: usock: add helper waiting for socket to be ready MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Miłecki --- usock.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'usock.c') diff --git a/usock.c b/usock.c index 64eab9e..db1ddce 100644 --- a/usock.c +++ b/usock.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -130,3 +131,29 @@ int usock(int type, const char *host, const char *service) { usock_set_flags(sock, type); return sock; } + +int usock_wait_ready(int fd, int msecs) { + struct pollfd fds[1]; + int res; + + fds[0].fd = fd; + fds[0].events = POLLOUT; + + res = poll(fds, 1, msecs); + if (res < 0) { + return errno; + } else if (res == 0) { + return -ETIMEDOUT; + } else { + int err = 0; + socklen_t optlen = sizeof(err); + + res = getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, &optlen); + if (res) + return errno; + if (err) + return err; + } + + return 0; +} -- cgit v1.2.3