Re: Strange connect behavior

From: Eric Dumazet
Date: Mon Oct 30 2006 - 05:33:24 EST


On Monday 30 October 2006 11:24, Videau Brice wrote:
> Hello,
>
> While writing some client server application in c, we noticed a strange
> behavior : if we try to connect endlessly to a given local port where
> nobody is listening, and if the port is >= to 32768, after several
> thousands tries ( Connection refused ) connect will return 0.
> This behavior is not exhibited when port is < 32768.
>

Hello Brice

Yes, it's quite possible your attempts are hitting themselves.

Hint :

cat /proc/sys/net/ipv4/ip_local_port_range

When you connect(), TCP stack automatically chose a source port and bind your
outgoing socket. If the chosen port happens to be 35489 (your 'destination'
port), then the connect succeeds (you're connected to yourself), as specified
by TCP specs.


> We confirmed this behavior in kernel 2.6.17-10, 2.6.18-1, 2.6.8, on x86
> and 2.4.21-32 on ia64, on several hardware configurations.
> Distribution is debian or ubuntu.
>
> Attached is a source file that demonstrate this behavior.
> ./a.out port_number
>
> Sample execution :
>
> ./a.out 35489
> Out port : 35489
> connect try 1 failed : Connection refused
> connect try 2 failed : Connection refused
> connect try 3 failed : Connection refused
> .....
> connect try 6089 failed : Connection refused
> connect try 6090 failed : Connection refused
> Connection success : 6091 try
> Connection closed
> last error : Connection refused
>
>
> Is this behavior to be expected?
> Can it be disabled?
>
> Thanks in advance.
>
> Regards,
>
> Brice Videau
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/