ab fails to connect to localhost

Posted jack-star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ab fails to connect to localhost相关的知识,希望对你有一定的参考价值。

The following command fails:

$ ab -n 1 localhost:8000/
...
Benchmarking localhost (be patient)...apr_socket_recv: Connection refused (111)

But this one succeeds:

$ ab -n 1 127.0.0.1:8000/

In /etc/hosts I have:

127.0.0.1   localhost.localdomain   localhost
::1     localhost.localdomain   localhost

The issue here is caused by ab taking the first result returned by apr_sockaddr_info_get:

https://github.com/apache/httpd/blob/2.4.29/support/ab.c#L1835-L1837

But apr_sockaddr_info_get returns a list. If it were to try the second sockaddr structure, it would connect. This way it works:


    rv = apr_sockaddr_info_get(&sa, REMOTE_HOST, APR_UNSPEC, REMOTE_PORT, 0, mp);
    if (rv != APR_SUCCESS) {
        return rv;
    }
    
    for ( ; sa; sa = sa->next) {
        rv = apr_socket_create(&s, sa->family, SOCK_STREAM, APR_PROTO_TCP, mp);
        if (rv != APR_SUCCESS) {
            return rv;
        }

        apr_socket_opt_set(s, APR_SO_NONBLOCK, 1);
        apr_socket_timeout_set(s, SOCK_TIMEOUT);

        rv = apr_socket_connect(s, sa);
        if (rv == ECONNREFUSED) {
            continue;
        } else if (rv == APR_SUCCESS) {
            break;
        } else {
            return rv;
        }
    }

    apr_socket_opt_set(s, APR_SO_NONBLOCK, 0);
    apr_socket_timeout_set(s, SOCK_TIMEOUT);


Other tools (like, curl, wget, w3m) deal with it just fine.

P.S. A couple of links just in case

https://gist.github.com/x-yuri/5ad28ac0a22ca19a7c3073ce0de5abf0
https://gist.github.com/x-yuri/95fd4776fb9bf8f1eaae7eb2e7ed6bd4

  

以上是关于ab fails to connect to localhost的主要内容,如果未能解决你的问题,请参考以下文章

安装完docker后报错Got permission denied while trying to connect to the Docker daemon socket...

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.

docker使用遇到问题Got permission denied while trying to connect to the Docker daemon socket

docker使用遇到问题Got permission denied while trying to connect to the Docker daemon socket

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.