示例#1
0
        /// <summary>
        /// 监听
        /// </summary>
        /// <returns></returns>
        public bool Listen()
        {
            Start();
            _sessioinListen.Start();
            _listenSocket = new Socket(_settings.LocalEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                _listenSocket.ReceiveBufferSize = _settings.BufferSize;
                _listenSocket.SendBufferSize    = _settings.BufferSize;

                if (_settings.LocalEndPoint.AddressFamily == AddressFamily.InterNetworkV6)
                {
                    // Set dual-mode (IPv4 & IPv6) for the socket listener.
                    _listenSocket.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, false);
                    _listenSocket.Bind(new IPEndPoint(IPAddress.IPv6Any, _settings.LocalEndPoint.Port));
                }
                else
                {
                    _listenSocket.Bind(_settings.LocalEndPoint);
                }

                // Start the server.
                _listenSocket.Listen(_settings.Backlog);
                TraceLog.ReleaseWrite("The socket-server {0}:{1} is listenning", _settings.LocalEndPoint.Address, _settings.LocalEndPoint.Port);
                // Post accepts on the listening socket.);

                SocketAsyncEventArgs acceptEventArg;
                if (!_acceptPool.TryPop(out acceptEventArg))
                {
                    acceptEventArg = CreateAcceptEventArgs();
                }
                StartAccept(acceptEventArg);
                return(true);
            }
            catch (SocketException sex)
            {
                TraceLog.WriteError("The socket-server {0}:{1} listen error:{2}-{3}",
                                    _settings.LocalEndPoint.Address, _settings.LocalEndPoint.Port, sex.SocketErrorCode, sex);
            }
            catch (Exception ex)
            {
                TraceLog.WriteError("The socket-server {0}:{1} error:{2}",
                                    _settings.LocalEndPoint.Address, _settings.LocalEndPoint.Port, ex);
            }
            return(false);
        }