Beispiel #1
0
        public void Start()
        {
            Sock.Listen(1024);
            AcceptTask        = Accept();
            CheckPeerListTask = CheckPeerList();

            OnLog?.Invoke($"Node Started on {Sock.LocalEndPoint}!");
        }
Beispiel #2
0
        public void WaitForLink()
        {
            Sock.Listen(1);
            Client     = Sock.Accept();
            Connection = true;

            /*System.EventArgs lol = new System.EventArgs();
             * OnConnect(this, lol);*/

            Thread t = new Thread(Loop);

            t.Start();

            Handshake();
            return;
        }
Beispiel #3
0
        // スレッド
        public void ListenerThread(object?param)
        {
            Sock?new_sock;
            Sock s;
            int  num_failed;

            this.thread = ThreadObj.GetCurrentThreadObj() !;

            this.Status = ListenerStatus.Trying;

            ThreadObj.NoticeInited();

            while (true)
            {
                bool firstFailed = true;
                this.Status = ListenerStatus.Trying;

                // Listen を試みる
                while (true)
                {
                    if (this.halt)
                    {
                        return;
                    }

                    try
                    {
                        s = Sock.Listen(this.Port, this.LocalOnly);

                        this.Sock = s;

                        break;
                    }
                    catch
                    {
                        if (firstFailed)
                        {
                            firstFailed = false;
                        }

                        this.eventObj.Wait(this.ListenRetryTime);

                        if (this.halt)
                        {
                            return;
                        }
                    }
                }

                this.Status = ListenerStatus.Listening;

                if (this.halt)
                {
                    this.Sock.Disconnect();
                    break;
                }

                num_failed = 0;

                // Accept ループ
                while (true)
                {
                    // Accept する
                    new_sock = this.Sock.Accept(this.GetHostName);
                    if (new_sock != null)
                    {
                        // 成功
                        tcpAccepted(new_sock);
                    }
                    else
                    {
                        // 失敗
                        if (this.halt == false)
                        {
                            if ((++num_failed) <= 5)
                            {
                                continue;
                            }
                        }

                        this.Sock.Disconnect();
                        break;
                    }
                }

                if (this.halt)
                {
                    return;
                }
            }
        }