Socket.Accept

どうも、スレッドをブロッキングしているみたい。

using System;
using System.Threading;
using System.Net;
using System.Net.Sockets;

class C {
  public static void Service () {
    Socket listener = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPEndPoint ep = new IPEndPoint (IPAddress.Any, 50000);
    listener.Bind (ep);
    listener.Listen (5);

    while (true) {
      Socket s = listener.Accept ();
      Thread.Sleep (500);
      s.Close ();
    }
  }

  public static void Main () {
    Thread t = new Thread (Service);
    t.IsBackground = true;
    t.Start ();

    Thread.Sleep (3000);
    Console.WriteLine ("Quit.");
  }
}

/* 
Quit.
...(終了しない)
 */

MS.NETだと終了します。