Beispiel #1
0
        public void ConnectAsync()
        {
            if (TCPState == TCPSocketState.Closed || TCPState == TCPSocketState.Listen)
            {
                if (TCPState == TCPSocketState.Closed)
                {
                    CreateTCB();
                }

                TCPFrame tcpFrame = new TCPFrame();
                tcpFrame.SynchronizeFlagSet = true;
                tcpFrame.SequenceNumber     = tcb.ISS;
                tcpFrame.SourcePort         = this.LocalBinding;
                tcpFrame.DestinationPort    = this.RemoteBinding;
                tcpFrame.Window             = tcb.RCV_WND;
                tcpFrame.EncapsulatedFrame  = new RawDataFrame(new byte[0]);
                tcpFrame.Checksum           = tcpFrame.CalculateChecksum(pseudoHeaderSource.GetPseudoHeader(tcpFrame));

                TransmitAssured(tcpFrame);

                tcb.SND_UNA = tcb.ISS;
                tcb.SND_NXT = (tcb.ISS + 1) % uint.MaxValue;

                this.TCPState = TCPSocketState.SynSent;
            }
            else
            {
                throw new InvalidOperationException("Cannot call Connect() on a socket which is being used.");
            }
        }