MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add proper idle/request timeouts

+44 -14
+44 -14
src/modules/server.c
··· 504 504 } 505 505 506 506 out = ant_http1_buffer_take(&buf, &out_len); 507 + ant_conn_set_timeout_ms(req->conn, req->server->idle_timeout_ms); 508 + 507 509 if (body_is_stream) { 508 510 if (!server_queue_write(req->conn, req, out, out_len, SERVER_WRITE_STREAM_READ)) return; 509 511 if (head_only) ant_conn_close(req->conn); ··· 626 628 } 627 629 628 630 out = ant_http1_buffer_take(&buf, &out_len); 631 + ant_conn_set_timeout_ms(req->conn, req->server->idle_timeout_ms); 632 + 629 633 server_queue_write( 630 634 req->conn, 631 635 req, out, out_len, ··· 652 656 } 653 657 654 658 out = ant_http1_buffer_take(&buf, &out_len); 659 + ant_conn_set_timeout_ms(req->conn, req->server->idle_timeout_ms); 660 + 655 661 server_queue_write(req->conn, req, out, out_len, SERVER_WRITE_STREAM_READ); 656 662 server_request_release(req); 663 + 657 664 return js_mkundef(); 658 665 } 659 666 ··· 969 976 ant_value_t port = js_get(js, default_export, "port"); 970 977 ant_value_t hostname = js_get(js, default_export, "hostname"); 971 978 ant_value_t idle_timeout = js_get(js, default_export, "idleTimeout"); 979 + ant_value_t request_timeout = js_get(js, default_export, "requestTimeout"); 972 980 ant_value_t unix_path = js_get(js, default_export, "unix"); 973 981 ant_value_t tls = js_get(js, default_export, "tls"); 974 982 975 983 *looks_like_config = 976 - vtype(fetch) != T_UNDEF || 977 - vtype(port) != T_UNDEF || 978 - vtype(hostname) != T_UNDEF || 979 - vtype(idle_timeout) != T_UNDEF || 980 - vtype(unix_path) != T_UNDEF || 981 - vtype(tls) != T_UNDEF; 984 + vtype(fetch) != T_UNDEF || 985 + vtype(port) != T_UNDEF || 986 + vtype(hostname) != T_UNDEF || 987 + vtype(idle_timeout) != T_UNDEF || 988 + vtype(request_timeout) != T_UNDEF || 989 + vtype(unix_path) != T_UNDEF || 990 + vtype(tls) != T_UNDEF; 982 991 } 983 992 984 993 return false; ··· 1013 1022 1014 1023 ant_value_t port_v = 0; 1015 1024 ant_value_t hostname_v = 0; 1016 - ant_value_t timeout_v = 0; 1025 + ant_value_t idle_timeout_v = 0; 1026 + ant_value_t request_timeout_v = 0; 1017 1027 ant_value_t unix_v = 0; 1018 1028 ant_value_t tls_v = 0; 1019 1029 ··· 1033 1043 .hostname = strdup("0.0.0.0"), 1034 1044 .unix_path = NULL, 1035 1045 .port = 3000, 1036 - .request_timeout_ms = 5000, 1037 - .idle_timeout_ms = 5000, 1046 + .request_timeout_ms = 30000, 1047 + .idle_timeout_ms = 30000, 1038 1048 .loop = uv_default_loop(), 1039 1049 }; 1040 1050 ··· 1070 1080 1071 1081 port_v = js_get(js, default_export, "port"); 1072 1082 hostname_v = js_get(js, default_export, "hostname"); 1073 - timeout_v = js_get(js, default_export, "idleTimeout"); 1083 + idle_timeout_v = js_get(js, default_export, "idleTimeout"); 1084 + request_timeout_v = js_get(js, default_export, "requestTimeout"); 1074 1085 1075 1086 if (vtype(port_v) != T_UNDEF && vtype(port_v) != T_NULL) { 1076 1087 if (vtype(port_v) != T_NUM) { ··· 1107 1118 server->hostname = next_hostname; 1108 1119 } 1109 1120 1110 - if (vtype(timeout_v) != T_UNDEF && vtype(timeout_v) != T_NULL) { 1121 + if (vtype(idle_timeout_v) != T_UNDEF && vtype(idle_timeout_v) != T_NULL) { 1111 1122 double timeout = 0; 1112 - if (vtype(timeout_v) != T_NUM) { 1123 + if (vtype(idle_timeout_v) != T_NUM) { 1113 1124 free(server->unix_path); 1114 1125 free(server->hostname); 1115 1126 free(server); 1116 1127 return js_mkerr_typed(js, JS_ERR_TYPE, "server idleTimeout must be a number"); 1117 1128 } 1118 - timeout = js_getnum(timeout_v); 1129 + timeout = js_getnum(idle_timeout_v); 1119 1130 if (timeout < 0) { 1120 1131 free(server->unix_path); 1121 1132 free(server->hostname); 1122 1133 free(server); 1123 1134 return js_mkerr_typed(js, JS_ERR_RANGE, "server idleTimeout must be >= 0"); 1124 1135 } 1136 + server->idle_timeout_ms = (uint64_t)(timeout * 1000.0); 1137 + } 1138 + 1139 + if (vtype(request_timeout_v) != T_UNDEF && vtype(request_timeout_v) != T_NULL) { 1140 + double timeout = 0; 1141 + if (vtype(request_timeout_v) != T_NUM) { 1142 + free(server->unix_path); 1143 + free(server->hostname); 1144 + free(server); 1145 + return js_mkerr_typed(js, JS_ERR_TYPE, "server requestTimeout must be a number"); 1146 + } 1147 + 1148 + timeout = js_getnum(request_timeout_v); 1149 + if (timeout < 0) { 1150 + free(server->unix_path); 1151 + free(server->hostname); 1152 + free(server); 1153 + return js_mkerr_typed(js, JS_ERR_RANGE, "server requestTimeout must be >= 0"); 1154 + } 1155 + 1125 1156 server->request_timeout_ms = (uint64_t)(timeout * 1000.0); 1126 - server->idle_timeout_ms = server->request_timeout_ms; 1127 1157 } 1128 1158 1129 1159 uv_signal_init(server->loop, &server->sigint_handle);