[erlang-questions] wierd "function not used" problem - code included
deepblue_other
cktgatb@REDACTED
Sun Oct 5 20:40:18 CEST 2008
there was a tiny error in the last one, and I put the correct arity in
spawn_link()
this should compile
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:
>
> 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-tp19826465p19827720.html
Sent from the Erlang Questions mailing list archive at Nabble.com.
More information about the erlang-questions
mailing list