public ClientCSharpShell (int pid)
{
// Create a server socket we listen on whose address is passed to the agent
TcpListener listener = new TcpListener (new IPEndPoint (IPAddress.Loopback, 0));
listener.Start ();
TcpListener interrupt_listener = new TcpListener (new IPEndPoint (IPAddress.Loopback, 0));
interrupt_listener.Start ();
string agent_assembly = typeof (ClientCSharpShell).Assembly.Location;
string agent_arg = String.Format ("--agent:{0}:{1}" ,
((IPEndPoint)listener.Server.LocalEndPoint).Port,
((IPEndPoint)interrupt_listener.Server.LocalEndPoint).Port);
var vm = new Attach.VirtualMachine (pid);
vm.Attach (agent_assembly, agent_arg);
/* Wait for the client to connect */
TcpClient client = listener.AcceptTcpClient ();
ns = client.GetStream ();
TcpClient interrupt_client = interrupt_listener.AcceptTcpClient ();
interrupt_stream = interrupt_client.GetStream ();
Console.WriteLine ("Connected.");
}