public bool TryInitiateHandsake() { var peerHandshake = new PeerHandshake(Constants.HandshakeProtocolIdentifier, InfoHash, PeerId); try { Socket.Send(peerHandshake.ToHandshakeBytes()); byte[] response = new byte[Constants.MaxMessageSize]; var bytesReceived = Socket.Receive(response); if (bytesReceived == 0) { return(false); } var handshakeContent = new PeerHandshake(response.Take(bytesReceived).ToArray()); if (!InfoHash.SequenceEqual(handshakeContent.InfoHash)) { return(false); } var totalHandshakeBytes = handshakeContent.Length + handshakeContent.Reserved.Length + 1 + handshakeContent.InfoHash.Length + handshakeContent.PeerId.Length; var leftovers = response.Skip(totalHandshakeBytes).Take(bytesReceived - totalHandshakeBytes); TemporaryReceiveBuffer.AddRange(leftovers); return(true); } catch { return(false); } }