I would just keep one socket around. Sometimes when there is network congestion, an open socket pair will stay functional even when new socket pairs cannot be connected.
However, brief router outages can cause loss of connection, so even if you just use an open socket, you have to think about what to do if it goes down. Typically, you would just reopen the connection, and possibly resend any failed messages.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com