diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index dded30ec..b7c9705f 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -394,6 +394,25 @@ void libwebsockets_00_spam(char *key, int count, int seed) } } +int lws_send_pipe_choked(struct libwebsocket *wsi) +{ + struct pollfd fds; + + fds.fd = wsi->sock; + fds.events = POLLOUT; + fds.revents = 0; + + if (poll(&fds, 1, 0) != 1) + return 1; + + if ((fds.revents & POLLOUT) == 0) + return 1; + + /* okay to send another packet without blocking */ + + return 0; +} + /** * libwebsocket_service_fd() - Service polled socket with something waiting * @context: Websocket context diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index e560f055..9866871d 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -335,6 +335,9 @@ libwebsockets_get_random(struct libwebsocket_context *context, extern int lws_issue_raw(struct libwebsocket *wsi, unsigned char *buf, size_t len); +extern int +lws_send_pipe_choked(struct libwebsocket *wsi); + #ifndef LWS_OPENSSL_SUPPORT unsigned char *