mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-29 04:09:31 +03:00
Added new function MHD_get_timeout_i()
This function is useful for direct in in poll() or epoll_wait().
This commit is contained in:
@@ -96,7 +96,7 @@ extern "C"
|
||||
* they are parsed as decimal numbers.
|
||||
* Example: 0x01093001 = 1.9.30-1.
|
||||
*/
|
||||
#define MHD_VERSION 0x00097509
|
||||
#define MHD_VERSION 0x00097510
|
||||
|
||||
/* If generic headers don't work on your platform, include headers
|
||||
which define 'va_list', 'size_t', 'ssize_t', 'intptr_t',
|
||||
@@ -2903,7 +2903,8 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
|
||||
* connections with data pending in network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout64(),
|
||||
* #MHD_get_timeout64s() functions) when "external" polling is used.
|
||||
* #MHD_get_timeout64s(), #MHD_get_timeout_i() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns #MHD_YES then #MHD_run() (or #MHD_run_from_select())
|
||||
* must be called right after return from polling function, regardless of
|
||||
* the states of MHD FDs.
|
||||
@@ -2939,7 +2940,8 @@ MHD_get_timeout (struct MHD_Daemon *daemon,
|
||||
* connections with data pending in network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout(),
|
||||
* #MHD_get_timeout64s() functions) when "external" polling is used.
|
||||
* #MHD_get_timeout64s(), #MHD_get_timeout_i() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns #MHD_YES then #MHD_run() (or #MHD_run_from_select())
|
||||
* must be called right after return from polling function, regardless of
|
||||
* the states of MHD FDs.
|
||||
@@ -2978,7 +2980,8 @@ MHD_get_timeout64 (struct MHD_Daemon *daemon,
|
||||
* network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout(),
|
||||
* #MHD_get_timeout64() functions) when "external" polling is used.
|
||||
* #MHD_get_timeout64(), #MHD_get_timeout_i() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns non-negative value then #MHD_run() (or
|
||||
* #MHD_run_from_select()) must be called right after return from polling
|
||||
* function, regardless of the states of MHD FDs.
|
||||
@@ -3001,6 +3004,47 @@ _MHD_EXTERN int64_t
|
||||
MHD_get_timeout64s (struct MHD_Daemon *daemon);
|
||||
|
||||
|
||||
/**
|
||||
* Obtain timeout value for external polling function for this daemon.
|
||||
*
|
||||
* This function set value to the amount of milliseconds for which polling
|
||||
* function (`select()`, `poll()` or epoll) should at most block, not the
|
||||
* timeout value set for connections.
|
||||
*
|
||||
* Any "external" sockets polling function must be called with the timeout
|
||||
* value provided by this function (if returned value is non-negative).
|
||||
* Smaller timeout values can be used for polling function if it is required
|
||||
* for any reason, but using larger timeout value or no timeout (indefinite
|
||||
* timeout) when this function returns non-negative value will break MHD
|
||||
* processing logic and result in "hung" connections with data pending in
|
||||
* network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout(),
|
||||
* #MHD_get_timeout64(), #MHD_get_timeout64s() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns non-negative value then #MHD_run() (or
|
||||
* #MHD_run_from_select()) must be called right after return from polling
|
||||
* function, regardless of the states of MHD FDs.
|
||||
*
|
||||
* In practice, if zero or positive value is returned then #MHD_run() (or
|
||||
* #MHD_run_from_select()) must be called not later than returned amount of
|
||||
* millisecond even if no activity is detected on sockets by sockets
|
||||
* polling function.
|
||||
*
|
||||
* @param daemon the daemon to query for timeout
|
||||
* @return -1 if connections' timeouts are not set and no data processing
|
||||
* is pending, so external polling function may wait for sockets
|
||||
* activity for indefinite amount of time,
|
||||
* otherwise returned value is the the maximum amount of millisecond
|
||||
* (capped at INT_MAX) that external polling function must wait
|
||||
* for the activity of FDs.
|
||||
* @note Available since #MHD_VERSION 0x00097510
|
||||
* @ingroup event
|
||||
*/
|
||||
_MHD_EXTERN int
|
||||
MHD_get_timeout_i (struct MHD_Daemon *daemon);
|
||||
|
||||
|
||||
/**
|
||||
* Run webserver operations (without blocking unless in client callbacks).
|
||||
*
|
||||
|
||||
+59
-3
@@ -3896,7 +3896,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
|
||||
* connections with data pending in network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout64(),
|
||||
* #MHD_get_timeout64s() functions) when "external" polling is used.
|
||||
* #MHD_get_timeout64s(), #MHD_get_timeout_i() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns #MHD_YES then #MHD_run() (or #MHD_run_from_select())
|
||||
* must be called right after return from polling function, regardless of
|
||||
* the states of MHD FDs.
|
||||
@@ -3947,7 +3948,8 @@ MHD_get_timeout (struct MHD_Daemon *daemon,
|
||||
* connections with data pending in network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout(),
|
||||
* #MHD_get_timeout64s() functions) when "external" polling is used.
|
||||
* #MHD_get_timeout64s(), #MHD_get_timeout_i() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns #MHD_YES then #MHD_run() (or #MHD_run_from_select())
|
||||
* must be called right after return from polling function, regardless of
|
||||
* the states of MHD FDs.
|
||||
@@ -4058,7 +4060,8 @@ MHD_get_timeout64 (struct MHD_Daemon *daemon,
|
||||
* network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout(),
|
||||
* #MHD_get_timeout64() functions) when "external" polling is used.
|
||||
* #MHD_get_timeout64(), #MHD_get_timeout_i() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns non-negative value then #MHD_run() (or
|
||||
* #MHD_run_from_select()) must be called right after return from polling
|
||||
* function, regardless of the states of MHD FDs.
|
||||
@@ -4092,6 +4095,59 @@ MHD_get_timeout64s (struct MHD_Daemon *daemon)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obtain timeout value for external polling function for this daemon.
|
||||
*
|
||||
* This function set value to the amount of milliseconds for which polling
|
||||
* function (`select()`, `poll()` or epoll) should at most block, not the
|
||||
* timeout value set for connections.
|
||||
*
|
||||
* Any "external" sockets polling function must be called with the timeout
|
||||
* value provided by this function (if returned value is non-negative).
|
||||
* Smaller timeout values can be used for polling function if it is required
|
||||
* for any reason, but using larger timeout value or no timeout (indefinite
|
||||
* timeout) when this function returns non-negative value will break MHD
|
||||
* processing logic and result in "hung" connections with data pending in
|
||||
* network buffers and other problems.
|
||||
*
|
||||
* It is important to always use this function (or #MHD_get_timeout(),
|
||||
* #MHD_get_timeout64(), #MHD_get_timeout64s() functions) when "external"
|
||||
* polling is used.
|
||||
* If this function returns non-negative value then #MHD_run() (or
|
||||
* #MHD_run_from_select()) must be called right after return from polling
|
||||
* function, regardless of the states of MHD FDs.
|
||||
*
|
||||
* In practice, if zero or positive value is returned then #MHD_run() (or
|
||||
* #MHD_run_from_select()) must be called not later than returned amount of
|
||||
* millisecond even if no activity is detected on sockets by sockets
|
||||
* polling function.
|
||||
* @remark To be called only from thread that process
|
||||
* daemon's select()/poll()/etc.
|
||||
*
|
||||
* @param daemon the daemon to query for timeout
|
||||
* @return -1 if connections' timeouts are not set and no data processing
|
||||
* is pending, so external polling function may wait for sockets
|
||||
* activity for indefinite amount of time,
|
||||
* otherwise returned value is the the maximum amount of millisecond
|
||||
* (capped at INT_MAX) that external polling function must wait
|
||||
* for the activity of FDs.
|
||||
* @note Available since #MHD_VERSION 0x00097510
|
||||
* @ingroup event
|
||||
*/
|
||||
_MHD_EXTERN int
|
||||
MHD_get_timeout_i (struct MHD_Daemon *daemon)
|
||||
{
|
||||
#if SIZEOF_INT >= SIZEOF_INT64_T
|
||||
return MHD_get_timeout64s (daemon);
|
||||
#else /* SIZEOF_INT < SIZEOF_INT64_T */
|
||||
const int64_t to64 = MHD_get_timeout64s (daemon);
|
||||
if (INT_MAX >= to64)
|
||||
return to64;
|
||||
return INT_MAX;
|
||||
#endif /* SIZEOF_INT < SIZEOF_INT64_T */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obtain timeout value for polling function for this daemon.
|
||||
* @remark To be called only from the thread that processes
|
||||
|
||||
Reference in New Issue
Block a user