|
|
|
@ -71,6 +71,7 @@ int network_server_init(server *srv, buffer *host_token, specific_config *s) {
|
|
|
|
|
const char *host; |
|
|
|
|
buffer *b; |
|
|
|
|
int is_unix_domain_socket = 0; |
|
|
|
|
int fd; |
|
|
|
|
|
|
|
|
|
#ifdef SO_ACCEPTFILTER |
|
|
|
|
struct accept_filter_arg afa; |
|
|
|
@ -254,6 +255,33 @@ int network_server_init(server *srv, buffer *host_token, specific_config *s) {
|
|
|
|
|
addr_len = strlen(host) + sizeof(srv_socket->addr.un.sun_family); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/* check if the socket exists and try to connect to it. */ |
|
|
|
|
if (-1 != (fd = connect(srv_socket->fd, (struct sockaddr *) &(srv_socket->addr), addr_len))) { |
|
|
|
|
close(fd); |
|
|
|
|
|
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "ss",
|
|
|
|
|
"server socket is still in use:",
|
|
|
|
|
host); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* connect failed */ |
|
|
|
|
switch(errno) { |
|
|
|
|
case ECONNREFUSED: |
|
|
|
|
unlink(host); |
|
|
|
|
break; |
|
|
|
|
case ENOENT: |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sds",
|
|
|
|
|
"testing socket failed:",
|
|
|
|
|
host, strerror(errno)); |
|
|
|
|
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
addr_len = 0; |
|
|
|
@ -262,7 +290,18 @@ int network_server_init(server *srv, buffer *host_token, specific_config *s) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (0 != bind(srv_socket->fd, (struct sockaddr *) &(srv_socket->addr), addr_len)) { |
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sds", "can't bind to port", port, strerror(errno)); |
|
|
|
|
switch(srv_socket->addr.plain.sa_family) { |
|
|
|
|
case AF_UNIX: |
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "sds",
|
|
|
|
|
"can't bind to socket:",
|
|
|
|
|
host, strerror(errno)); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
log_error_write(srv, __FILE__, __LINE__, "ssds",
|
|
|
|
|
"can't bind to port:",
|
|
|
|
|
host, port, strerror(errno)); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|