public void The_TCP_transport_implementation_handle_tcp_connection_actor_death_properly()
{
new TestSetup(this, shouldBindServer:false).Run(x =>
{
var serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(x.Endpoint);
serverSocket.Listen(100);
var connectCommander = CreateTestProbe();
connectCommander.Send(Sys.Tcp(), new Tcp.Connect(x.Endpoint));
var accept = serverSocket.Accept();
connectCommander.ExpectMsg<Tcp.Connected>().RemoteAddress.AsInstanceOf<IPEndPoint>().Port.ShouldBe(x.Endpoint.Port);
var connectionActor = connectCommander.LastSender;
connectCommander.Send(connectionActor, PoisonPill.Instance);
AwaitConditionNoThrow(() =>
{
try
{
var buffer = new byte[1024];
return accept.Receive(buffer) == 0;
}
catch (SocketException ex)
{
return true;
}
}, TimeSpan.FromSeconds(3));
VerifyActorTermination(connectionActor);
});
}