News for hackers. Stuff that matters.
Re:Maintaining 65k open connections in a single Ruby process by toast0 on Monday October 29, 2018 @06:57PM (#18332408)
If I'm a server, and my ip is 192.0.2.1, and i listen on port 80, my nearby clients 192.0.2.2 and 192.0.2.3 can each establish just about 64k connections to me (port 0 doesn't generally work). I like to think of it as a 5-tuple

{Protocol, PeerA, PeerB, PortA, PortB} ex:

{tcp, 192.0.2.1, 192.0.2.2, 80, 12345} is distinct from {tcp, 192.0.2.1, 192.0.2.3, 80, 12345}

With roughly 2^32 ipv4 addresses and 2^16 client ports for each ip, you should be able to establish 2^48 connections to your server IP. Although, it usually requires a bit more than standard effort to actually use quite that many client ports per IP, by default you have to fight against high vs low ports, and anyway not a lot of OSes have a very sane allocation policy for ports.

Note also: if you're testing this on localhost, IANA has assigned you 2^24 ipv4 addresses for localhost, 127.0.0.0/8, so if i assume you're going to listen on all addresses, and connect to all addresses from all addresses, that gives you 2^24 x ( 2^24 x 2^16 ) = 2^64 connections. It might take you some time to iterate through an array that large :)

There are no comments on this comment yet.