Esempio n. 1
0
 /// <SUMMARY>
 /// Callback function: A new connection is waiting.
 /// </SUMMARY>
 private void ConnectionReady_Handler(IAsyncResult ar)
 {
     lock (_padLock)
     {
         if (_listener == null)
         {
             return;
         }
         Socket conn = _listener.EndAccept(ar);
         if (_connections.Count >= _maxConnections)
         {
             //Max number of connections reached.
             string msg = "SE001: Server busy";
             conn.Send(Encoding.UTF8.GetBytes(msg), 0,
                       msg.Length, SocketFlags.None);
             conn.Shutdown(SocketShutdown.Both);
             conn.Close();
         }
         else
         {
             //Start servicing a new connection
             ChoConnectionState st = new ChoConnectionState();
             st.Connection = conn;
             st.Server     = this;
             st.Serializer = Serializer;
             st.Provider   = (ChoTcpServiceProvider)_provider.Clone();
             st.Buffer     = new byte[4];
             _connections.Add(st);
             //Queue the rest of the job to be executed latter
             ThreadPool.QueueUserWorkItem(AcceptConnection, st);
         }
         //Resume the listening callback loop
         _listener.BeginAccept(ConnectionReady, null);
     }
 }
Esempio n. 2
0
        private void Connect()
        {
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _socket.Connect(_localEP);
            ChoConnectionState st = _connection = new ChoConnectionState();

            st.Connection = _socket;
            st.Client     = this;
            st.Serializer = Serializer;
            st.Provider   = (ChoTcpServiceProvider)_provider.Clone();
            st.Buffer     = new byte[1024];
            if (_socket.Connected)
            {
                RaiseConnected();
                _socket.BeginReceive(_connection.Buffer, 0, 0, SocketFlags.None, ReceivedDataReady, _connection);
            }
        }