libwebsockets
Lightweight C library for HTML5 websockets
Connection timeouts

Macros

#define LWS_TO_KILL_ASYNC   -1
 
#define LWS_TO_KILL_SYNC   -2
 
#define LWS_SET_TIMER_USEC_CANCEL   ((lws_usec_t)-1ll)
 
#define LWS_USEC_PER_SEC   (1000000ll)
 

Enumerations

enum  pending_timeout {
  NO_PENDING_TIMEOUT = 0, PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1, PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4, PENDING_TIMEOUT_AWAITING_PING = 5, PENDING_TIMEOUT_CLOSE_ACK = 6, PENDING_TIMEOUT_UNUSED1 = 7,
  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8, PENDING_TIMEOUT_SSL_ACCEPT = 9, PENDING_TIMEOUT_HTTP_CONTENT = 10, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, PENDING_TIMEOUT_CGI = 14, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17, PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18, PENDING_TIMEOUT_AWAITING_SOCKS_GREETING_REPLY = 19,
  PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY = 20, PENDING_TIMEOUT_AWAITING_SOCKS_AUTH_REPLY = 21, PENDING_TIMEOUT_KILLED_BY_SSL_INFO = 22, PENDING_TIMEOUT_KILLED_BY_PARENT = 23,
  PENDING_TIMEOUT_CLOSE_SEND = 24, PENDING_TIMEOUT_HOLDING_AH = 25, PENDING_TIMEOUT_UDP_IDLE = 26, PENDING_TIMEOUT_CLIENT_CONN_IDLE = 27,
  PENDING_TIMEOUT_LAGGING = 28, PENDING_TIMEOUT_THREADPOOL = 29, PENDING_TIMEOUT_THREADPOOL_TASK = 30, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE = 31,
  PENDING_TIMEOUT_USER_REASON_BASE = 1000
}
 

Functions

LWS_VISIBLE LWS_EXTERN uint64_t lws_time_in_microseconds (void)
 
LWS_VISIBLE LWS_EXTERN void lws_set_timeout (struct lws *wsi, enum pending_timeout reason, int secs)
 
LWS_VISIBLE LWS_EXTERN void lws_set_timer_usecs (struct lws *wsi, lws_usec_t usecs)
 
LWS_VISIBLE LWS_EXTERN int lws_timed_callback_vh_protocol (struct lws_vhost *vh, const struct lws_protocols *prot, int reason, int secs)
 

Detailed Description

APIs related to setting connection timeouts

Macro Definition Documentation

◆ LWS_TO_KILL_ASYNC

#define LWS_TO_KILL_ASYNC   -1

#include <include/libwebsockets/lws-timeout-timer.h>

If LWS_TO_KILL_ASYNC is given as the timeout sec in a lws_set_timeout() call, then the connection is marked to be killed at the next timeout check. This is how you should force-close the wsi being serviced if you are doing it outside the callback (where you should close by nonzero return).

◆ LWS_TO_KILL_SYNC

#define LWS_TO_KILL_SYNC   -2

#include <include/libwebsockets/lws-timeout-timer.h>

If LWS_TO_KILL_SYNC is given as the timeout sec in a lws_set_timeout() call, then the connection is closed before returning (which may delete the wsi). This should only be used where the wsi being closed is not the wsi currently being serviced.

Function Documentation

◆ lws_set_timeout()

LWS_VISIBLE LWS_EXTERN void lws_set_timeout ( struct lws *  wsi,
enum pending_timeout  reason,
int  secs 
)

#include <include/libwebsockets/lws-timeout-timer.h>

lws_set_timeout() - marks the wsi as subject to a timeout

You will not need this unless you are doing something special

Parameters
wsiWebsocket connection instance
reasontimeout reason
secshow many seconds. You may set to LWS_TO_KILL_ASYNC to force the connection to timeout at the next opportunity, or LWS_TO_KILL_SYNC to close it synchronously if you know the wsi is not the one currently being serviced.

◆ lws_set_timer_usecs()

LWS_VISIBLE LWS_EXTERN void lws_set_timer_usecs ( struct lws *  wsi,
lws_usec_t  usecs 
)

#include <include/libwebsockets/lws-timeout-timer.h>

lws_set_timer_usecs() - schedules a callback on the wsi in the future

Parameters
wsiWebsocket connection instance
usecsLWS_SET_TIMER_USEC_CANCEL removes any existing scheduled callback, otherwise number of microseconds in the future the callback will occur at.

NOTE: event loop support for this:

default poll() loop: yes libuv event loop: yes libev: not implemented (patch welcome) libevent: not implemented (patch welcome)

After the deadline expires, the wsi will get a callback of type LWS_CALLBACK_TIMER and the timer is exhausted. The deadline may be continuously deferred by further calls to lws_set_timer_usecs() with a later deadline, or cancelled by lws_set_timer_usecs(wsi, -1).

If the timer should repeat, lws_set_timer_usecs() must be called again from LWS_CALLBACK_TIMER.

Accuracy depends on the platform and the load on the event loop or system... all that's guaranteed is the callback will come after the requested wait period.

◆ lws_time_in_microseconds()

LWS_VISIBLE LWS_EXTERN uint64_t lws_time_in_microseconds ( void  )

#include <include/libwebsockets/lws-timeout-timer.h>

lws_time_in_microseconds() - Returns the unix time in microseconds