|  | @@ -28,7 +28,7 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              if (!IPAddress.TryParse(this.ConnectionInfo.Host, out addr))
 | 
	
		
			
				|  |  |                  addr = Dns.GetHostAddresses(host).First();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            var ep = new IPEndPoint(addr, port); 
 | 
	
		
			
				|  |  | +            var ep = new IPEndPoint(addr, port);
 | 
	
		
			
				|  |  |              this._socket = new Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              var socketBufferSize = 2 * MAXIMUM_PACKET_SIZE;
 | 
	
	
		
			
				|  | @@ -63,7 +63,12 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              var data = new byte[1];
 | 
	
		
			
				|  |  |              do
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                var received = this._socket.Receive(data);
 | 
	
		
			
				|  |  | +                var asyncResult = this._socket.BeginReceive(data, 0, data.Length, SocketFlags.None, null, null);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (!asyncResult.AsyncWaitHandle.WaitOne(this.ConnectionInfo.Timeout))
 | 
	
		
			
				|  |  | +                    throw new SshOperationTimeoutException("Socket read operation has timed out");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                var received = this._socket.EndReceive(asyncResult);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  //  If zero bytes received then exit
 | 
	
		
			
				|  |  |                  if (received == 0)
 | 
	
	
		
			
				|  | @@ -118,7 +123,7 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |                          //
 | 
	
		
			
				|  |  |                          // Adding a check for this._isDisconnecting causes ReceiveMessage() to throw SshConnectionException: "Bad packet length {0}".
 | 
	
		
			
				|  |  |                          //
 | 
	
		
			
				|  |  | -						throw new SshConnectionException("An established connection was aborted by the software in your host machine.", DisconnectReason.ConnectionLost);
 | 
	
		
			
				|  |  | +                        throw new SshConnectionException("An established connection was aborted by the software in your host machine.", DisconnectReason.ConnectionLost);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  catch (SocketException exp)
 |