|  | @@ -247,6 +247,11 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// </summary>
 | 
	
		
			
				|  |  |          public event EventHandler<EventArgs> Disconnected;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        /// <summary>
 | 
	
		
			
				|  |  | +        /// Occurs when host key received.
 | 
	
		
			
				|  |  | +        /// </summary>
 | 
	
		
			
				|  |  | +        public event EventHandler<HostKeyEventArgs> HostKeyReceived;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          #region Message events
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -625,7 +630,7 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              var index = EventWaitHandle.WaitAny(waitHandles, this.ConnectionInfo.Timeout);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (index < 1)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | +            {                
 | 
	
		
			
				|  |  |                  throw this._exception;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              else if (index > 1)
 | 
	
	
		
			
				|  | @@ -1122,6 +1127,8 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              //  Create instance of key exchange algorithm that will be used
 | 
	
		
			
				|  |  |              this._keyExchange = this.ConnectionInfo.KeyExchangeAlgorithms[keyExchangeAlgorithmName].CreateInstance<KeyExchange>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            this._keyExchange.HostKeyReceived += KeyExchange_HostKeyReceived;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              //  Start the algorithm implementation
 | 
	
		
			
				|  |  |              this._keyExchange.Start(this, message);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1167,6 +1174,7 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              //  Dispose of old KeyExchange object as it is no longer needed.
 | 
	
		
			
				|  |  |              if (this._keyExchange != null)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | +                this._keyExchange.HostKeyReceived -= KeyExchange_HostKeyReceived;
 | 
	
		
			
				|  |  |                  this._keyExchange.Dispose();
 | 
	
		
			
				|  |  |                  this._keyExchange = null;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -1417,6 +1425,14 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          #endregion
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        private void KeyExchange_HostKeyReceived(object sender, HostKeyEventArgs e)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            if (this.HostKeyReceived != null)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                this.HostKeyReceived(this, e);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
		
			
				|  |  |          /// Reads the specified length of bytes from the server
 | 
	
		
			
				|  |  |          /// </summary>
 | 
	
	
		
			
				|  | @@ -1624,6 +1640,7 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if (this._keyExchange != null)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | +                        this._keyExchange.HostKeyReceived -= KeyExchange_HostKeyReceived;
 | 
	
		
			
				|  |  |                          this._keyExchange.Dispose();
 | 
	
		
			
				|  |  |                          this._keyExchange = null;
 | 
	
		
			
				|  |  |                      }
 |