int status;
int bound = 0;
- int tcp_ka_idl = 1;
- int tcp_ka_int = 1;
- int tcp_ka_cnt = 3;
+ int tcp_ka_idl, tcp_ka_int, tcp_ka_cnt;
struct listener *l = NULL;
struct addrinfo *addrs = NULL, *p = NULL;
}
/* TCP keep-alive */
- if( setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &yes, sizeof(yes)) ||
- setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &tcp_ka_idl, sizeof(tcp_ka_idl)) ||
- setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &tcp_ka_int, sizeof(tcp_ka_int)) ||
- setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &tcp_ka_cnt, sizeof(tcp_ka_cnt)) )
+ if( conf->tcp_keepalive > 0 )
{
- fprintf(stderr, "Notice: Unable to enable TCP keep-alive: %s\n",
- strerror(errno));
+ tcp_ka_idl = 1;
+ tcp_ka_cnt = 3;
+ tcp_ka_int = conf->tcp_keepalive;
+
+ if( setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &yes, sizeof(yes)) ||
+ setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &tcp_ka_idl, sizeof(tcp_ka_idl)) ||
+ setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &tcp_ka_int, sizeof(tcp_ka_int)) ||
+ setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &tcp_ka_cnt, sizeof(tcp_ka_cnt)) )
+ {
+ fprintf(stderr, "Notice: Unable to enable TCP keep-alive: %s\n",
+ strerror(errno));
+ }
}
/* required to get parallel v4 + v6 working */
hdrdata = &buffer[i+2];
}
- /* have no name and found [A-Z], start of name */
- else if( !hdrname && isalpha(buffer[i]) && isupper(buffer[i]) )
+ /* have no name and found [A-Za-z], start of name */
+ else if( !hdrname && isalpha(buffer[i]) )
{
hdrname = &buffer[i];
}
if( conf->lua_state &&
uh_path_match(conf->lua_prefix, req->url) )
{
- /* auth ok? */
- if( uh_auth_check(cl, req, pin) )
- conf->lua_request(cl, req, conf->lua_state);
+ conf->lua_request(cl, req, conf->lua_state);
}
else
#endif
if( (pin = uh_path_lookup(cl, req->url)) != NULL )
{
/* auth ok? */
- if( uh_auth_check(cl, req, pin) )
+ if( !pin->redirected && uh_auth_check(cl, req, pin) )
uh_dispatch_request(cl, req, pin);
}
int main (int argc, char **argv)
{
/* master file descriptor list */
- fd_set used_fds, serv_fds, read_fds;
+ fd_set serv_fds;
/* working structs */
struct addrinfo hints;
void *lib;
#endif
- /* clear the master and temp sets */
- FD_ZERO(&used_fds);
FD_ZERO(&serv_fds);
- FD_ZERO(&read_fds);
/* handle SIGPIPE, SIGINT, SIGTERM, SIGCHLD */
sa.sa_flags = 0;
#endif
while( (opt = getopt(argc, argv,
- "fSDRC:K:E:I:p:s:h:c:l:L:d:r:m:x:i:t:T:")) > 0
+ "fSDRC:K:E:I:p:s:h:c:l:L:d:r:m:x:i:t:T:A:")) > 0
) {
switch(opt)
{
conf.network_timeout = atoi(optarg);
break;
+ /* tcp keep-alive */
+ case 'A':
+ conf.tcp_keepalive = atoi(optarg);
+ break;
+
/* no fork */
case 'f':
nofork = 1;
return 0;
}
-