On Wed, Feb 2, 2011 at 5:36 PM, John Cowan <[email protected]> wrote:
> On Wed, Feb 2, 2011 at 5:24 PM, Brian Hurt <[email protected]> wrote: > > This isn't the right venue for this question, but I'm not sure where else > to > > ask, and I'm hoping that someone here might be able to help. Basically, > > I've got a program that, for long involved reasons, creates lots of > sockets > > (millions). It's closing them (clojure macros for the win), so I'm not > > running out of descriptors, but after a while, creating new sockets start > > throwing java.net.ConnectException: Cannot assign requested address > errors. > > This problem always starts at about the same period of time, and seems to > go > > away after a while (I'm trying to quantify how long). Note that these > are > > client sockets, not server sockets. The exception makes perfect sense > for > > server sockets (someone else has already bound the port you're trying to > > bind), but not for client sockets. > > A new client port number is assigned every time the client opens a TCP > connection, and there are only 65536 port numbers, so eventually you > will run out. I'm not familiar with how much control Java gives you > over the underlying C socket API, but you can share client port > numbers between sockets, as long as you make sure that two connections > *to the same server port on the same IP address* don't share port > numbers. > That's not the problem. We wrap around multiple times (exhaust all 30K or so port numbers and start over again) multiple times before we hit this problem. We're closing the sockets as fast as we're opening them, so there are always plenty of unused port numbers around (we actually never have more than 2-3 sockets open at any given point in time). > > -- > GMail doesn't have rotating .sigs, but you can see mine at > http://www.ccil.org/~cowan/signatures<http://www.ccil.org/%7Ecowan/signatures> > > -- > You received this message because you are subscribed to the Google Groups > "JVM Languages" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<jvm-languages%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/jvm-languages?hl=en. > > -- You received this message because you are subscribed to the Google Groups "JVM Languages" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/jvm-languages?hl=en.
