tls_write() with poll()

           pfd[0].fd = fd;
           pfd[0].events = POLLIN|POLLOUT;
           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 = tls_write(ctx, buf, len);
                           if (ret == TLS_WANT_POLLIN)
                                   pfd[0].events = POLLIN;
                           else if (ret == TLS_WANT_POLLOUT)
                                   pfd[0].events = POLLOUT;
                           else if (ret < 0)
                                   err(1, "tls_write: %s", tls_error(ctx));
                           else {
                                   buf += ret;
                                   len -= ret;
                           }
                   }
           }