Messages in this thread | | | Subject | Wierd listen/connect: accept queue never fills up | From | Philippe Troin <> | Date | 27 Nov 2002 18:58:33 -0800 |
| |
[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 <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>
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/
| |