mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-31 13:00:49 +00:00
Set keep alive on TCP level
This commit is contained in:
1 parent
be6162ff2e
commit
abc230eb34
1 file changed
+11
-3
+11
-3
@@ -3333,7 +3333,7 @@ static int parse_port_string(const struct vec *vec, struct socket *so) {
|
|||||||
|
|
||||||
static int set_ports_option(struct mg_context *ctx) {
|
static int set_ports_option(struct mg_context *ctx) {
|
||||||
const char *list = ctx->config[LISTENING_PORTS];
|
const char *list = ctx->config[LISTENING_PORTS];
|
||||||
int reuseaddr = 1, success = 1;
|
int on = 1, success = 1;
|
||||||
SOCKET sock;
|
SOCKET sock;
|
||||||
struct vec vec;
|
struct vec vec;
|
||||||
struct socket so, *listener;
|
struct socket so, *listener;
|
||||||
@@ -3350,9 +3350,17 @@ static int set_ports_option(struct mg_context *ctx) {
|
|||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
// On Windows, SO_REUSEADDR is recommended only for
|
// On Windows, SO_REUSEADDR is recommended only for
|
||||||
// broadcast UDP sockets
|
// broadcast UDP sockets
|
||||||
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuseaddr,
|
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on,
|
||||||
sizeof(reuseaddr)) != 0 ||
|
sizeof(on)) != 0 ||
|
||||||
#endif // !_WIN32
|
#endif // !_WIN32
|
||||||
|
// Set TCP keep-alive. This needed because if HTTP-level
|
||||||
|
// keep-alive is enabled, and client resets the connection,
|
||||||
|
// server won't get TCP FIN or RST and will keep the connection
|
||||||
|
// open forever. With TCP keep-alive, next keep-alive
|
||||||
|
// handshake will figure out that the client is down and
|
||||||
|
// will close the server end.
|
||||||
|
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &on,
|
||||||
|
sizeof(on)) != 0 ||
|
||||||
bind(sock, &so.lsa.u.sa, so.lsa.len) != 0 ||
|
bind(sock, &so.lsa.u.sa, so.lsa.len) != 0 ||
|
||||||
listen(sock, 20) != 0) {
|
listen(sock, 20) != 0) {
|
||||||
closesocket(sock);
|
closesocket(sock);
|
||||||
|
|||||||
Reference in new issue
Block a user