// $Id: echo.ici,v 1.0 2003/01/03 11:26:00 dada Exp $ // http://dada.perl.it/shootout // // contributed by Tim Long /* * This is a thread based version of the client-server echo test. * sys.fork() is available on UNIX-like systems, but is not core * language, and is not available on Windows. */ n = argv[1] ? int(argv[1]) : 1; data = "Hello there sailor\n"; static echo_client(n, port) { sock := net.connect(net.socket("tcp/ip"), port); for (i := 0; i < n; ++i) { net.send(sock, data); if ((ans := net.recv(sock, nels(data))) != data) printf("received \"%s\", expected \"%s\"", ans, data); } net.close(sock); return 1; } ssock = net.listen(net.bind(net.socket("tcp/ip"), 0)); client = thread(echo_client, n, net.getportno(ssock)); csock = net.accept(ssock); t = 0; while (str = net.recv(csock, nels(data))) { net.send(csock, str); t += nels(str); } waitfor(client.result; client) ; printf("server processed %d bytes\n", t);