introduce lws_send_pipe_choked
authorAndy Green <andy@warmcat.com>
Sun, 6 Mar 2011 10:29:39 +0000 (10:29 +0000)
committerAndy Green <andy@warmcat.com>
Sun, 6 Mar 2011 10:29:39 +0000 (10:29 +0000)
Signed-off-by: Andy Green <andy@warmcat.com>
lib/libwebsockets.c
lib/private-libwebsockets.h

index dded30e..b7c9705 100644 (file)
@@ -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
index e560f05..9866871 100644 (file)
@@ -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 *