Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Feb 2005 16:18:41 +0300
From:      Deomid Ryabkov <myself@rojer.pp.ru>
To:        freebsd-hackers@freebsd.org
Subject:   occasional ECONNREFUSED when connect()ing.
Message-ID:  <4215EB31.8020107@rojer.pp.ru>

next in thread | raw e-mail | index | archive | help
This is a cryptographically signed message in MIME format.

--------------ms060204010106040602020300
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

I have a strange case of occasional refused connect()'s.
The system is running 4.10-STABLE.

This was originally reported by one of our developers.
The test script he provided is a simple Perl script that repeatedly 
fetches an URL
from Apache running on this same server.
In the run of 2000 iterations, there are 5-10 random errors fetching the 
URL.
After further investigation and digging, I uncovered the true cause of 
the error:
connect() returning ECONNREFUSED.
To see if this was somehow related to Apache, I wrote my own simple 
server that
accept()'s a connection, read()'s what supposed to be request and 
write()'s a stereotypic reply,
thus resembling an HTTP request/reply conversation.
The number of sporadically occuring connect() errors has increased somewhat,
maybe due to quicker turnaround of my stub-server.
The question is - why do connections get refused at all?
I can think of no valid reasons...

here's the output of the client as i see it:

----------------------------- sample output of x.pl 
-----------------------------
71590, http://localhost:8000/junk, 2000: starting.
59 500 Can't connect to localhost:8000 (Timeout connect: Connection refused)
127 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
213 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
259 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
363 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
402 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
416 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
690 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
703 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
754 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
947 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
960 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
997 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
1163 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
1272 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
1433 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
1612 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
1887 500 Can't connect to localhost:8000 (Timeout connect: Connection 
refused)
----------------------------- cut -----------------------------
(the confusing "Timeout connect:" message is a result of my 
IO/Socket/INET.pm hacking.
without it, just a confusing "Timeout" was reported. i added printing of 
actual error string.)

a fragment of output of the same script running under strace:

----------------------------- strace of x.pl -----------------------------
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(3, {sa_family=AF_INET, sin_port=htons(8000), 
sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Connection refused)
----------------------------- cut -----------------------------

and the source of both server and client used:

----------------------------- accepter.c (server) 
-----------------------------
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#include <stdio.h>

char *reply = "HTTP/1.0 200 OK\r\nConetnt-type: 
text/plain\r\n\r\nNothing special.\r\n";
int rlen;

int main(int argc, char **argv) {

        int i, cal;
        int s, ss, n;
        char *buf;
        struct sockaddr_in saddr, caddr;

        memset(&saddr, 0, sizeof saddr);
        saddr.sin_family = AF_INET;
        saddr.sin_addr.s_addr = htonl(INADDR_ANY);
        saddr.sin_port = htons(8000);

        ss = socket(PF_INET, SOCK_STREAM, 6);
        if (ss < 0) return 1;
        if (bind(ss, (struct sockaddr *) &saddr, sizeof saddr) < 0) 
return 2;
        if (listen(ss, 511) < 0) return 3;

        buf = (char *) malloc(4096);
        if (buf == NULL) return 4;

        rlen = strlen(reply);

        fprintf(stderr, "accepting.\n");

        for (cal = sizeof caddr;
             s = accept(ss, (struct sockaddr *) &caddr, &cal);
             cal = sizeof caddr) {

                n = read(s, buf, 4096);
                if (n > 0) {
                        write(s, reply, rlen);
                }
                close(s);
        }

        return (s < 0);
}
----------------------------- cut -----------------------------

----------------------------- x.pl (client) -----------------------------
#!/usr/bin/perl

$| = 1;

use LWP::UserAgent;

$url = 'http://localhost:8000/junk';

my $n = 2000;

print "$$, $url, $n: starting.\n";

for (my $i = 0; $i < $n; $i++) {
        my $ua = LWP::UserAgent->new;
        $ua->timeout(1000);
        $req = HTTP::Request->new("GET" => $url);
        $res = $ua->request($req);

        print $i." ".$res->status_line."\n" if (0 or $res->code == 500);
}

exit();
----------------------------- cut -----------------------------

--
Deomid Ryabkov aka Rojer
myself@rojer.pp.ru
rojer@sysadmins.ru
ICQ: 8025844


--------------ms060204010106040602020300
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJIzCC
AuwwggJVoAMCAQICAwwKdjANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UE
ChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNv
bmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwHhcNMDQwMzMxMjIxODA5WhcNMDUwMzMxMjIxODA5
WjBfMRAwDgYDVQQEEwdSeWFia292MQ8wDQYDVQQqEwZEZW9taWQxFzAVBgNVBAMTDkRlb21p
ZCBSeWFia292MSEwHwYJKoZIhvcNAQkBFhJteXNlbGZAcm9qZXIucHAucnUwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBxXgFP/1lZDqp0dzUDzR5IBb7aKki6TD+HMMkRjtP
IOcaNHsfoDer9RFrFICoxNQZF86iopYFVYr7msgB9y2dKZTRQQoOA72lFrOyH3sgrztx/3LL
axEsihA2cxcrglrIgPEm6FF2aabbKVpSdeslMCDPBr0auAm0QLo8ch9c5j0vuQUBrs8TKU6f
6YZLNO2Sk/fPZP2kfJEkXyZhkU6wq3ER1CHq2qgfNpW2Ni7Kuv/eYI/CV1BGgm37ZPubOyxI
LNiRUGT0pv0wocrCIehKqoI1uFPZgGS0ANYTqPJQSdjlSzMGQJjT510PNDJnDfKOvLhcadD+
6gSL/ovNM/LPAgMBAAGjLzAtMB0GA1UdEQQWMBSBEm15c2VsZkByb2plci5wcC5ydTAMBgNV
HRMBAf8EAjAAMA0GCSqGSIb3DQEBBAUAA4GBACunC6DhFX4I6Nvdy/UevjSd3VmKWPRmqwoR
l0RXvuI/JVyPO9KHGqxCMpRu7ArJz7d8ShPVs5kynysrB+Nm6/fwWjeaW21+gViojeO9gGP6
Np/LeMIqkqSYMoElq7Feqh/3qp7a/UxuofFtAW9V/2tRunxaPo4/WOxcdcmdcC86MIIC7DCC
AlWgAwIBAgIDDAp2MA0GCSqGSIb3DQEBBAUAMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxU
aGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwg
RnJlZW1haWwgSXNzdWluZyBDQTAeFw0wNDAzMzEyMjE4MDlaFw0wNTAzMzEyMjE4MDlaMF8x
EDAOBgNVBAQTB1J5YWJrb3YxDzANBgNVBCoTBkRlb21pZDEXMBUGA1UEAxMORGVvbWlkIFJ5
YWJrb3YxITAfBgkqhkiG9w0BCQEWEm15c2VsZkByb2plci5wcC5ydTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMHFeAU//WVkOqnR3NQPNHkgFvtoqSLpMP4cwyRGO08g5xo0
ex+gN6v1EWsUgKjE1BkXzqKilgVVivuayAH3LZ0plNFBCg4DvaUWs7IfeyCvO3H/cstrESyK
EDZzFyuCWsiA8SboUXZpptspWlJ16yUwIM8GvRq4CbRAujxyH1zmPS+5BQGuzxMpTp/phks0
7ZKT989k/aR8kSRfJmGRTrCrcRHUIeraqB82lbY2Lsq6/95gj8JXUEaCbftk+5s7LEgs2JFQ
ZPSm/TChysIh6EqqgjW4U9mAZLQA1hOo8lBJ2OVLMwZAmNPnXQ80MmcN8o68uFxp0P7qBIv+
i80z8s8CAwEAAaMvMC0wHQYDVR0RBBYwFIESbXlzZWxmQHJvamVyLnBwLnJ1MAwGA1UdEwEB
/wQCMAAwDQYJKoZIhvcNAQEEBQADgYEAK6cLoOEVfgjo293L9R6+NJ3dWYpY9GarChGXRFe+
4j8lXI870ocarEIylG7sCsnPt3xKE9WzmTKfKysH42br9/BaN5pbbX6BWKiN472AY/o2n8t4
wiqSpJgygSWrsV6qH/eqntr9TG6h8W0Bb1X/a1G6fFo+jj9Y7Fx1yZ1wLzowggM/MIICqKAD
AgECAgENMA0GCSqGSIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVy
biBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5n
MSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtU
aGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZy
ZWVtYWlsQHRoYXd0ZS5jb20wHhcNMDMwNzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQsw
CQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoG
A1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZWh5owHUEcJ3f6f+jHuy9zfVb8hp2vX8MOmHy
v1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/EfkTYkKhPPK9Xzgnc9A74r/rsY
Pge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMBAAGjgZQwgZEwEgYDVR0T
AQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLnRoYXd0ZS5jb20v
VGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYDVR0RBCIwIKQe
MBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GBAEiM0VCD
6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+hLGZ
GwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC
3CEZNd4ksdMdRv9dX2VPMYIDOzCCAzcCAQEwaTBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMc
VGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFs
IEZyZWVtYWlsIElzc3VpbmcgQ0ECAwwKdjAJBgUrDgMCGgUAoIIBpzAYBgkqhkiG9w0BCQMx
CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNTAyMTgxMzE4NDFaMCMGCSqGSIb3DQEJ
BDEWBBTVJ16792QuMz+W1C96FzL8pUVAlTBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMH
MA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIB
KDB4BgkrBgEEAYI3EAQxazBpMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29u
c3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwg
SXNzdWluZyBDQQIDDAp2MHoGCyqGSIb3DQEJEAILMWugaTBiMQswCQYDVQQGEwJaQTElMCMG
A1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBl
cnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECAwwKdjANBgkqhkiG9w0BAQEFAASCAQBS1kMy
IXwcudfab1G40Tm2+h2eUOTMZb+xZwKW8JsLsfRZMGp6k222JDDlAxndCzCXCFNE8akBJDWP
DtkjU+y7RYUvVr95/A99d+Vj7AWUJUQtEcut1SIXJkoyxNbQJ48aZ1hYZnaNCRALKNU23q2W
lMykABBM0bYnNc+2vrmXM52jZ2sWcipgwSB941X5KvJzoLQxUYjWSEo6cDWSgf0OvzyaFe9S
dRHpNvmZYg9F8aMPola/vLSVTWr/Tk+nKiGOHHReUjA+kk2knEJj+C/hCuH8yG3amempiye5
iMfeYqZzUSwTfvokeNvwzhDqV9RurlfE5Vq7754d0HauarW1AAAAAAAA
--------------ms060204010106040602020300--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4215EB31.8020107>