private void HandshakeCallback(IAsyncResult ar) { try { int received = LocalSocket.EndReceive(ar); if(received == 0) { Dispose(); return; } switch(LocalBuffer[0]) { case 4: // SOCKS 4 _socksHandler = new Socks4Handler(LocalSocket, HandshakeEnd); break; case 5: // SOCKS 5 _socksHandler = new Socks5Handler(LocalSocket, HandshakeEnd, _authCallback); break; default: Dispose(); return; } _socksHandler.BeginRequestData(); } catch { Dispose(); } }