Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void acceptPart(object param) {
- TcpListener listener = param as TcpListener;
- // ループカウンタ。
- int loop_count = 0;
- // 非同期情報。
- IAsyncResult accept_done = null;
- // TCP クライアント。
- TcpClient client = null;
- ManualResetEvent receive_complete = new ManualResetEvent( false );
- // 待機時間。
- TimeSpan wait_time = TimeSpan.FromMilliseconds( 100 );
- try {
- accept_done = listener.BeginAcceptTcpClient( onAcceptComplated, null );
- /*
- * 受信要求待機ループです。
- */
- while ( true ) {
- // WaitHandle の waitOne メソッドで接続要求を少しだけ待機します。
- if ( accept_done.AsyncWaitHandle.WaitOne( wait_time ) ) {
- /*
- * シグナルを捕捉したので、待機ループを終了します。
- */
- client = listener.EndAcceptTcpClient( accept_done );
- Console.WriteLine( "accept connections." );
- IPEndPoint remote_point = (IPEndPoint)client.Client.RemoteEndPoint;
- Console.Write( "connection has been requested from {0}.", remote_point );
- ThreadPool.QueueUserWorkItem( receivePart, new pair<TcpClient, ManualResetEvent>(client) );
- break;
- } else {
- /*
- * タイムアウトしました。
- * 指定された時間までにシグナルを捕捉できませんでした。
- */
- if ( loop_count > 30 )
- return;
- }
- ++ loop_count;
- }
- } finally {
- if ( client != null )
- client.Close();
- }
- //
- receive_complete.WaitOne();
- }
Add Comment
Please, Sign In to add comment