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/