There is unfortunately no timneout property, however, there is an easy way to time the connection. With the follwoing steps:
1) Create a variable called Connected, set to false
2) Where you want to call connect:
1) Set Connected to false
2) Call Socket.BeginConnect
3) Use an ManualResetEvent.WaitOne(*length of timeout*)
3) When the AsynConnect event is called set Connected to true or false and set the waiting ManualResetEvent
4) If the waiting ManualResetEvent timesout then Connected will be false and you can handle it or if the connection fails Connected will be false and you can then handle or, if all succeeded, Connected will be true and you can continue using that connection.
It is a simple solution with little, practically no, need for threading.
Hope this helps,