public static void NotNullListener() { var t = new TcpListener(); Assert.Throws<ArgumentNullException>(() => new TcpListener(null)); Assert.Throws<ArgumentNullException>(() => t.Bind(null)); Assert.Throws<ArgumentNullException>(() => t.Bind(null as string, 8000)); Assert.Throws<ArgumentNullException>(() => t.Bind(null as IPAddress, 8000)); Assert.Throws<ArgumentNullException>(() => t.Listen(null)); t.Close(); }
public void OneSideClose(IPEndPoint ep) { int close_cb_called = 0; int cl_send_cb_called = 0; int cl_recv_cb_called = 0; int sv_send_cb_called = 0; int sv_recv_cb_called = 0; var server = new TcpListener(); server.Bind(ep); server.Listen(); server.Connection += () => { var socket = server.Accept(); socket.Resume(); socket.Read(Encoding.ASCII, (str) => { sv_recv_cb_called++; Assert.AreEqual("PING", str); socket.Write(Encoding.ASCII, "PONG", (s) => { sv_send_cb_called++; }); socket.Close(() => { close_cb_called++; }); server.Close(() => { close_cb_called++; }); }); }; Tcp client = new Tcp(); client.Connect(ep, (_) => { client.Read(Encoding.ASCII, (str) => { cl_recv_cb_called++; Assert.AreEqual("PONG", str); }); client.Complete += () => { close_cb_called++; }; client.Resume(); client.Write(Encoding.ASCII, "PING", (s) => { cl_send_cb_called++; }); }); Assert.AreEqual(0, close_cb_called); Assert.AreEqual(0, cl_send_cb_called); Assert.AreEqual(0, cl_recv_cb_called); Assert.AreEqual(0, sv_send_cb_called); Assert.AreEqual(0, sv_recv_cb_called); Loop.Default.Run(); Assert.AreEqual(3, close_cb_called); Assert.AreEqual(1, cl_send_cb_called); Assert.AreEqual(1, cl_recv_cb_called); Assert.AreEqual(1, sv_send_cb_called); Assert.AreEqual(1, sv_recv_cb_called); #if DEBUG Assert.AreEqual(1, UV.PointerCount); #endif }
public void TakenPort() { TcpListener s1 = new TcpListener(); TcpListener s2 = new TcpListener(); s1.Bind(IPAddress.Any, Default.Port); s1.Listen(); s2.Bind(IPAddress.Any, Default.Port); Assert.Throws<UVException>(() => s2.Listen()); s1.Close(); s2.Close(); }
public static void TakenPort() { TcpListener s1 = new TcpListener(); TcpListener s2 = new TcpListener(); s1.Bind(IPAddress.Any, Default.Port); s1.Listen((_) => {}); s2.Bind(IPAddress.Any, Default.Port); Assert.Throws<SocketException>(() => s2.Listen((_) => {}), "Address already in use"); s1.Close(); s2.Close(); }
public static void Stress(IPEndPoint ep) { for (int j = 0; j < 10; j++) { int times = 10; int close_cb_called = 0; int cl_send_cb_called = 0; int cl_recv_cb_called = 0; int sv_send_cb_called = 0; int sv_recv_cb_called = 0; var server = new TcpListener(); server.Bind(ep); server.Listen((socket) => { socket.Resume(); socket.Read(Encoding.ASCII, (str) => { sv_recv_cb_called++; Assert.AreEqual(Times("PING", times), str); for (int i = 0; i < times; i++) { socket.Write(Encoding.ASCII, "PONG", (s) => { sv_send_cb_called++; }); } socket.Close(() => { close_cb_called++; }); server.Close(() => { close_cb_called++; }); }); }); Tcp.Connect(ep, (_, client) => { client.Resume(); for (int i = 0; i < times; i++) { client.Write(Encoding.ASCII, "PING", (s) => { cl_send_cb_called++; }); } client.Read(Encoding.ASCII, (str) => { cl_recv_cb_called++; Assert.AreEqual(Times("PONG", times), str); client.Close(() => { close_cb_called++; }); }); }); Assert.AreEqual(0, close_cb_called); Assert.AreEqual(0, cl_send_cb_called); Assert.AreEqual(0, cl_recv_cb_called); Assert.AreEqual(0, sv_send_cb_called); Assert.AreEqual(0, sv_recv_cb_called); Loop.Default.Run(); Assert.AreEqual(3, close_cb_called); Assert.AreEqual(times, cl_send_cb_called); Assert.AreEqual(1, cl_recv_cb_called); Assert.AreEqual(times, sv_send_cb_called); Assert.AreEqual(1, sv_recv_cb_called); #if DEBUG Assert.AreEqual(1, UV.PointerCount); #endif } }
public static void Simple(IPEndPoint ep) { int close_cb_called = 0; int cl_send_cb_called = 0; int cl_recv_cb_called = 0; int sv_send_cb_called = 0; int sv_recv_cb_called = 0; var server = new TcpListener(); server.Bind(ep); server.Listen((socket) => { socket.Resume(); socket.Read(Encoding.ASCII, (str) => { sv_recv_cb_called++; Assert.AreEqual("PING", str); socket.Write(Encoding.ASCII, "PONG", (s) => { sv_send_cb_called++; }); socket.Close(() => { close_cb_called++; }); server.Close(() => { close_cb_called++; }); }); }); Tcp.Connect(Loop.Default, ep, (_, client) => { client.Resume(); client.Write(Encoding.ASCII, "PING", (s) => { cl_send_cb_called++; }); client.Read(Encoding.ASCII, (str) => { cl_recv_cb_called++; Assert.AreEqual("PONG", str); client.Close(() => { close_cb_called++; }); }); }); Assert.AreEqual(0, close_cb_called); Assert.AreEqual(0, cl_send_cb_called); Assert.AreEqual(0, cl_recv_cb_called); Assert.AreEqual(0, sv_send_cb_called); Assert.AreEqual(0, sv_recv_cb_called); Loop.Default.Run(); Assert.AreEqual(3, close_cb_called); Assert.AreEqual(1, cl_send_cb_called); Assert.AreEqual(1, cl_recv_cb_called); Assert.AreEqual(1, sv_send_cb_called); Assert.AreEqual(1, sv_recv_cb_called); #if DEBUG Assert.AreEqual(1, UV.PointerCount); #endif }
public static void PeerAndSockname() { Tcp client = null; Tcp server = null; bool called = false; var l = new TcpListener(); l.Bind(IPAddress.Any, 8000); Action check = () => { if (client == null || server == null) { return; } Assert.AreEqual(client.Sockname, server.Peername); Assert.AreEqual(client.Peername, server.Sockname); Assert.AreEqual(server.Sockname.Port, 8000); client.Shutdown(); server.Shutdown(); l.Close(); called = true; }; l.Listen((tcp) => { server = tcp; check(); }); Tcp.Connect("127.0.0.1", 8000, (e, tcp) => { client = tcp; check(); }); Loop.Default.Run(); Assert.IsTrue(called); }
public void RemoteAndLocalAddress() { Tcp client = null; Tcp server = null; bool called = false; var l = new TcpListener(); l.Bind(IPAddress.Any, 8000); Action check = () => { if (client == null || server == null) { return; } Assert.Equal(client.LocalAddress, server.RemoteAddress); Assert.Equal(client.RemoteAddress, server.LocalAddress); Assert.Equal(server.LocalAddress.Port, 8000); client.Shutdown(); server.Shutdown(); l.Close(); called = true; }; l.Listen(); l.Connection += () => { server = l.Accept(); check(); }; Tcp t = new Tcp(); t.Connect("127.0.0.1", 8000, (e) => { client = t; check(); }); Loop.Default.Run(); Assert.True(called); }