Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Wed, 27 Nov 2002 21:51:17 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Wed, 27 Nov 2002 21:51:17 -0500 Received: from tantale.fifi.org ([216.27.190.146]:41622 "EHLO tantale.fifi.org") by vger.kernel.org with ESMTP id ; Wed, 27 Nov 2002 21:51:16 -0500 To: linux-kernel@vger.kernel.org Cc: Andi Kleen Subject: Wierd listen/connect: accept queue never fills up From: Philippe Troin Date: 27 Nov 2002 18:58:33 -0800 Message-ID: <87y97ee6xy.fsf@ceramic.fifi.org> User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1687 Lines: 54 [Andi, I've CC'ed you since you're listed as the author of the `new listen' code in net/ipv4/tcp_ipv4.c] Seen on linux 2.4.20rc2. This program is always able to establish new connections to itself: the accept queue never fills up and connections always succeed (although they take quite some time after the first four): #include #include #include #include int main(void) { int fd; struct sockaddr_in sin; socklen_t sinlen; if ((fd = socket(PF_INET, SOCK_STREAM, 0)) == -1) perror("socket"), exit(1); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); sin.sin_port = htons(0); if (bind(fd, (struct sockaddr*)&sin, sizeof(sin)) == -1) perror("bind"), exit(1); if (listen(fd, 1) == -1) perror("listen"), exit(1); sinlen = sizeof(sin); getsockname(fd, (struct sockaddr*)&sin, &sinlen); while (1) { int fdc; if ((fdc = socket(PF_INET, SOCK_STREAM, 0)) == -1) perror("socket"), exit(1); printf("%c", connect(fdc, (struct sockaddr*)&sin, sinlen) == -1 ? 'F' : '.'); fflush(stdout); } exit(0); } I've tried enabling and disabling tcp_syncookies, without any effect. The same program starts returning errors after two successful connects on Solaris and one on HP-UX. Linux keeps returning new connections... Phil. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/