The arguments passed to the to the command are:
- proxy_address proxy_port server_address server_port
-
- The proxy_address and proxy_port are derived from the first listener
- that is either IPv4, IPv6 or a UNIX socket. It is an error for no such
- listeners to exist. In the case of a UNIX socket listener the
- proxy_address will be the path of the socket and the proxy_port will
- be the string "NOT_USED".
+ <proxy_address> <proxy_port> <server_address> <server_port>
+
+ The <proxy_address> and <proxy_port> are derived from the first listener
+ that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket
+ listener the proxy_address will be the path of the socket and the
+ <proxy_port> will be the string "NOT_USED". In a backend section, it's not
+ possible to determine a listener, and both <proxy_address> and <proxy_port>
+ will have the string value "NOT_USED".
If the command executed and exits with a zero status then the check is
considered to have passed, otherwise the check is considered to have
break;
}
- if (!listener) {
- err_fmt = "Starting [%s:%s] check: no listener.\n";
- goto err;
- }
-
check->curpid = NULL;
check->envp = calloc(2, sizeof(check->argv));
check->argv[0] = px->check_command;
- if (listener->addr.ss_family == AF_INET ||
+ if (!listener) {
+ check->argv[1] = strdup("NOT_USED");
+ check->argv[2] = strdup("NOT_USED");
+ }
+ else if (listener->addr.ss_family == AF_INET ||
listener->addr.ss_family == AF_INET6) {
addr_to_str(&listener->addr, host, sizeof(host));
check->argv[1] = strdup(host);
port_to_str(&listener->addr, serv, sizeof(serv));
check->argv[2] = strdup(serv);
- } else if (listener->addr.ss_family == AF_UNIX) {
+ }
+ else if (listener->addr.ss_family == AF_UNIX) {
const struct sockaddr_un *un;
un = (struct sockaddr_un *)&listener->addr;
check->argv[1] = strdup(un->sun_path);
check->argv[2] = strdup("NOT_USED");
- } else {
+ }
+ else {
goto err;
}