Guest User

Untitled

a guest
Jul 17th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. void acceptPart(object param) {
  2. TcpListener listener = param as TcpListener;
  3.  
  4. // ループカウンタ。
  5. int loop_count = 0;
  6. // 非同期情報。
  7. IAsyncResult accept_done = null;
  8. // TCP クライアント。
  9. TcpClient client = null;
  10. ManualResetEvent receive_complete = new ManualResetEvent( false );
  11. // 待機時間。
  12. TimeSpan wait_time = TimeSpan.FromMilliseconds( 100 );
  13. try {
  14. accept_done = listener.BeginAcceptTcpClient( onAcceptComplated, null );
  15. /*
  16. * 受信要求待機ループです。
  17. */
  18. while ( true ) {
  19. // WaitHandle の waitOne メソッドで接続要求を少しだけ待機します。
  20. if ( accept_done.AsyncWaitHandle.WaitOne( wait_time ) ) {
  21. /*
  22. * シグナルを捕捉したので、待機ループを終了します。
  23. */
  24. client = listener.EndAcceptTcpClient( accept_done );
  25. Console.WriteLine( "accept connections." );
  26.  
  27. IPEndPoint remote_point = (IPEndPoint)client.Client.RemoteEndPoint;
  28. Console.Write( "connection has been requested from {0}.", remote_point );
  29.  
  30. ThreadPool.QueueUserWorkItem( receivePart, new pair<TcpClient, ManualResetEvent>(client) );
  31.  
  32. break;
  33. } else {
  34. /*
  35. * タイムアウトしました。
  36. * 指定された時間までにシグナルを捕捉できませんでした。
  37. */
  38. if ( loop_count > 30 )
  39. return;
  40. }
  41. ++ loop_count;
  42. }
  43. } finally {
  44. if ( client != null )
  45. client.Close();
  46. }
  47.  
  48. //
  49. receive_complete.WaitOne();
  50. }
Add Comment
Please, Sign In to add comment