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

Bengt Kleberg bengt.kleberg@REDACTED
Mon Jan 21 10:36:38 CET 2008


Greetings,

When run on Solaris9/Erts5.5.5.5 your program works for at least 2 
clients. Example:

In xterm 1
ws67042> telnet localhost 6011
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
asd
HTTP/1.1 200 OK
Content-type: text/html

<html><head></head><body>WOHOO<br>12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

In xterm 2
ws67042> telnet localhost 6011
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
asd
HTTP/1.1 200 OK
Content-type: text/html

<html><head></head><body>WOHOO<br>123456789101112131415161718192021222324252627


bengt
Those were the days...
    EPO guidelines 1978: "If the contribution to the known art resides
    solely in a computer program then the subject matter is not
    patentable in whatever manner it may be presented in the claims."


On 01/21/08 09:53, Rapsey wrote:
> 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
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list