write() with poll() pfd[0].fd = fd; pfd[0].events = POLLIN while (len > 0) { nready = poll(pfd, 1, 0); if (nready == -1) err(1, "poll"); if ((pfd[0].revents & (POLLERR|POLLNVAL))) errx(1, "bad fd %d", pfd[0].fd); if ((pfd[0].revents & (pfd[0].events|POLLHUP))) { ssize_t ret; ret = write(ctx, buf, len); if (ret < 0) { if(errno != EAGAIN && errno != EINTR) err(1, "tls_write: %s", tls_error(ctx)); } else { buf += ret; len -= ret; } } }