From b3d21f164df44ed64a1b4c726eb534cd85cc2e7c Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 25 Dec 2015 09:12:08 +0800 Subject: [PATCH] http header malloc pool allow listen accept flow control Add a private api to enable and disable server listen socket POLLIN Signed-off-by: Andy Green --- lib/private-libwebsockets.h | 6 ++++++ lib/server.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index b8a9dce..57dd9f9 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -536,6 +536,9 @@ struct lws_context { void *user_space; struct lws_plat_file_ops fops; +#ifndef LWS_NO_SERVER + struct lws *wsi_listening; +#endif }; enum { @@ -1220,10 +1223,13 @@ LWS_EXTERN int _lws_rx_flow_control(struct lws *wsi); LWS_EXTERN int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len); +LWS_EXTERN int +_lws_server_listen_accept_flow_control(struct lws_context *context, int on); #else #define lws_server_socket_service(_a, _b, _c) (0) #define _lws_rx_flow_control(_a) (0) #define lws_handshake_server(_a, _b, _c) (0) +#define _lws_server_listen_accept_flow_control(a, b) (0) #endif LWS_EXTERN int diff --git a/lib/server.c b/lib/server.c index 7e728f3..7fa1bdf 100644 --- a/lib/server.c +++ b/lib/server.c @@ -124,6 +124,7 @@ int lws_context_init_server(struct lws_context_creation_info *info, wsi->mode = LWSCM_SERVER_LISTENER; wsi->protocol = context->protocols; + context->wsi_listening = wsi; if (insert_wsi_socket_into_fds(context, wsi)) goto bail; @@ -181,6 +182,23 @@ _lws_rx_flow_control(struct lws *wsi) return 0; } +int +_lws_server_listen_accept_flow_control(struct lws_context *context, int on) +{ + struct lws *wsi = context->wsi_listening; + int n; + + if (!wsi) + return 0; + + if (on) + n = lws_change_pollfd(wsi, 0, LWS_POLLIN); + else + n = lws_change_pollfd(wsi, LWS_POLLIN, 0); + + return n; +} + int lws_http_action(struct lws *wsi) { enum http_connection_type connection_type; -- 2.7.4