[rabbitmq-discuss] Error: RabbitMQ.Client.ConnectionFactory.cs - "Only one usage of each socket address (protocol/network address/port) is normally permitted"

Tony Garnock-Jones tonyg at lshift.net
Tue Sep 1 15:43:07 BST 2009

Patrick Kenney wrote:
> am I not already already using the same socket?

You are not reusing the same socket. Every time you make the following call:

> new ConnectionFactory().CreateConnection("localhost:5672")

... you create a new connection factory, and then a new connection,
which involves creating and connecting a socket, and performing login
and connection parameter negotiation.

Every TCP socket you create, even once it is closed, stays allocated on
the system for about two minutes. This is a characteristic of TCP, and
happens on all operating systems and on all TCP-using applications. If
you have more than a few thousand (at most, tens of thousands) sockets
so registered, your local TCP stack will complain that no more sockets
are available -- just as you reported.

Also, every time you make the following call:

> conn.CreateModel()

... you create a new channel, which involves allocation of stateful
resources on both the server and client side.

We recommend that you

 - create a single connection (CreateConnection(...)) that you use
   for a long time, and

 - create a single channel/model (CreateModel()) that you use for a long
   time, one channel/model per thread (if you're using threads).

 [][][] Tony Garnock-Jones     | Mob: +44 (0)7905 974 211
   [][] LShift Ltd             | Tel: +44 (0)20 7729 7060
 []  [] http://www.lshift.net/ | Email: tonyg at lshift.net

More information about the rabbitmq-discuss mailing list