[erlang-questions] wierd "function not used" problem - code included

deepblue_other <>
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