"Always stay connected" mechanism for socket connection
I see there is problem in the usage to Timer. Consider the case if the server takes more time (> 5000) to connect, than the timer interval specified (3000) specified.  Then the timer elapsed event will fire again though the first elapsed event is not yet finished.  In order to avoid this stop the timer in the begin of Connect() and start the timer in end of Connect().