[erlang-questions] wierd "function not used" problem - code included
deepblue_other
cktgatb@REDACTED
Sun Oct 5 20:38:14 CEST 2008
here you go, this should compile
sorry about that
thanks
-module(tcp_manager).
%API--------------------------------------------
-export([start/1]).
%-----------------------------------------------
start(Port) ->
{ok, ListeningSocket} =
gen_tcp:listen( Port, [ binary, %receive data in binary form
{packet , 0},
{reuseaddr, true},
{active , once} ] ),
accept_connection(ListeningSocket).
%-----------------------------------------------
accept_connection(ListeningSocket) ->
io:format("waiting to accept~n"),
{ok, Socket} = gen_tcp:accept(ListeningSocket),
io:format("Socket is:~p~n", [Socket]),
%-----------------------------------------------
Listen_for_errors =
fun() ->
io:format("listening started~n"),
receive
{'EXIT', Pid, Why} ->
io:format("~p exited because:~p", [Pid,Why]);
Other ->
io:format("Other:~p~n", [Other])
end
end,
Listen_for_errors(),
%-----------------------------------------------
Handler_process = spawn_link(?MODULE, data_process, [Socket]), %,[]]),
io:format("handlers process ID:~p", [Handler_process]).
%-----------------------------------------------
data_process( Socket, DataSoFar) ->
io:format("responder_loop() entered~n"),
receive
{tcp, Socket, Data} ->
io:format("works - Data:~p~n", [Data]),
inet:setopts( Socket, [{active,once}] ),
data_process( Socket,
[Data | DataSoFar] );
{tcp_closed, Socket} ->
io:format("*client socket closed~n");
Other ->
io:format("undefined message came in:~p", [Other])
end.
%-----------------------------------------------
deepblue_other wrote:
>
> hmmm
> sorry, just a moment
>
> deepblue_other wrote:
>>
>> Hello, its me again...
>> so I've been having this problem for days, with the bellow code. Most of
>> it is straight out of the "Programming Erlang" book from Joe Armstrong...
>> however when Im compiling it its telling me that the function
>> data_process/1 is not being used, gives me a warning, but then still
>> compiles. however when Im sending data from a client side via TCP
>> ofcourse it exits on me because there's nothing to process the message...
>>
>> I HAVE NO IDEA WHAT'S WRONG WITH IT.
>> I've read up on all the spawn_link() definitions and as far as I can tell
>> Im using it correctly... the PiD that spawn_link() returns is being
>> returned so it executes successfully.
>> please help out, its stalling my project progress.
>> thanks
>>
>>
>> -module(tcp_manager).
>> %API--------------------------------------------
>> -export([start/1]).
>> %-----------------------------------------------
>> start(Port) ->
>> {ok, ListeningSocket} =
>> gen_tcp:listen( Port, [ binary, %receive data in binary form
>> {packet , 0},
>> {reuseaddr, true},
>> %hybrid - active for only one
>> message
>> %it auto-receives one message after
>> which it blocks
>> %has to be set to active-once again
>> to receive the next message
>> {active , once} ] ),
>> accept_connection(ListeningSocket).
>> %-----------------------------------------------
>> accept_connection(ListeningSocket) ->
>>
>> io:format("waiting to accept~n"),
>> {ok, Socket} = gen_tcp:accept(ListeningSocket),
>> io:format("Socket is:~p~n", [Socket]),
>>
>> %-----------------------------------------------
>> Listen_for_errors =
>> fun() ->
>> io:format("listening started~n"),
>> receive
>> {'EXIT', Pid, Why} ->
>> io:format("~p exited because:~p", [Pid,Why]);
>> Other ->
>> io:format("Other:~p~n", [Other])
>> end
>> end,
>> Listen_for_errors(),
>> %-----------------------------------------------
>>
>> Handler_process = spawn_link(?MODULE, data_process, [Socket]),
>> %,[]]),
>> io:format("handlers process ID:~p", [Handler_process]).
>>
>> accept_connection(ListeningSocket).
>> %-----------------------------------------------
>> data_process( Socket, DataSoFar) ->
>> io:format("responder_loop() entered~n"),
>>
>> receive
>> {tcp, Socket, Data} ->
>> %Source_ip = inet:peername(Socket),
>> %io:format("*~p - data coming in:~p~n",[Source_ip,Data]),
>> io:format("works - Data:~p~n", [Data]),
>> %has to be done, since its an active-once socket
>> inet:setopts( Socket, [{active,once}] ),
>> data_process( Socket,
>> %append the new binary fragment to what
>> has been received so far
>> [Data | DataSoFar] );
>>
>> {tcp_closed, Socket} ->
>> io:format("*client socket closed~n");
>> %reverse because data has been appended to the head of the
>> list as it was coming in
>> list_to_binary(lists:reverse(SoFar));
>> Other ->
>> io:format("undefined message came in:~p", [Other])
>> end.
>> %-----------------------------------------------
>>
>
>
--
View this message in context: http://www.nabble.com/wierd-%22function-not-used%22-problem---code-included-tp19826465p19827696.html
Sent from the Erlang Questions mailing list archive at Nabble.com.
More information about the erlang-questions
mailing list