[erlang-questions] should be a parallel tcp server, but can't connect to more than 1 client

Rapsey <>
Mon Jan 21 09:53:40 CET 2008


All this program does is listen on a socket, spawn a new process on every
connection and send a never ending stream of numbers to each client that
connects to it. The problem is that once 1 client is connected, no one else
can connect, even though a new acceptor process has been spawned.


start() ->
    case gen_tcp:listen(6002, [binary, {packet, 0}, {active, true},
{reuseaddr, true}]) of
        {ok, Sock} ->
            spawn(fun() -> accept_conn(Sock) end);
        {error, Reason} -> {error, Reason}
    end.


accept_conn(LSock) ->
    case gen_tcp:accept(LSock) of
        {ok, Sock} ->
            spawn(fun() -> accept_conn(LSock) end),
            handle_conn(Sock);
        _ ->
            true
    end.

% wait for http request from browser
handle_conn(Sock) ->
    receive
        {tcp, RecSock, Data} ->
            send_stream(RecSock, 0);
        {tcp_closed, _} ->
            true
    end.

send_stream(Sock, N) when N == 0 ->
    gen_tcp:send(Sock, "HTTP/1.1 200 OK\r\nContent-type:
text/html\r\n\r\n<html><head></head><body>WOHOO<br>"),
    send_stream(Sock, N + 1);
send_stream(Sock, N) ->
    case gen_tcp:send(Sock, integer_to_list(N)) of
        ok ->
            timer:sleep(1000),
            send_stream(Sock, N + 1);
        Any ->
            true
    end.


thank you,
Sergej
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20080121/7f8033ca/attachment.html>


More information about the erlang-questions mailing list