-module(win_fail). -export([rec/0, send/1, go/0]). -define(PORT_NO, 5678). -define(NO_OF_PACKETS, 9). go() -> spawn_link(?MODULE, rec, []), loop(). loop() -> timer:sleep(500), send("127.0.0.1"), loop(). rec() -> {ok, LSock} = gen_tcp:listen(?PORT_NO, [{packet, line}, {active, false}, {reuseaddr, true}]), rec_loop(LSock). rec_loop(LSock) -> {ok, Sock} = gen_tcp:accept(LSock), inet:setopts(Sock, [{packet, line}]), receive_all(Sock, 1), io:format("Done~n"), ok = gen_tcp:close(Sock), rec_loop(LSock). receive_all(Sock, No) when No =< ?NO_OF_PACKETS -> {ok, Line} = gen_tcp:recv(Sock, 0, 10000), case make_packet(No) of Line -> io:format("No ~p ok~n", [No]); _Other -> io:format("Expected ~p, Got ~p~n", [make_packet(No), Line]), flush(Sock), exit(bad) end, receive_all(Sock, No + 1); receive_all(_Sock, _) -> done. flush(Sock) -> case gen_tcp:recv(Sock, 0, 10000) of {ok, Line} -> io:format("Flush got ~p~n", [Line]), flush(Sock); {error, closed} -> io:format("Flush closed~n") end. send(Host) -> {ok, Sock} = gen_tcp:connect(Host, ?PORT_NO, [{packet, 0}]), do_send(Sock, 1), ok = gen_tcp:close(Sock). do_send(Sock, No) when No =< ?NO_OF_PACKETS -> ok = gen_tcp:send(Sock, make_packet(No)), do_send(Sock, No + 1); do_send(_,_) -> ok. cr() -> [16#d, 16#a]. make_packet(No) -> lists:duplicate(30, $A + No - 1) ++ cr().