Re: Socket handling seems to acquire and loose system resources.
Daniel Diaz <[email protected]> Thu, 12 Mar 2009 11:25:04 +0100
| Newsgroups | gmane.comp.gnu.prolog.bugs |
|---|---|
| Message-ID | <[email protected]> |
Hello Maurizio
It seems you notice a memory leak. However I don't see anything which
could at the source of this leak. Could you provide me a way to
reproduce the problem ?
BTW: why do you use a binary stream ? With a text stream, you could
simplify a lot your code.
Also, in order to benefit from prolog clause indexing (on the 1st
argument) you shoud reverse the arguments of put_bytes/2 :
put_bytes([], _Sout).
put_bytes([C|R],Sout):- put_byte(Sout,C), put_bytes(R,Sout).
(but this has nothing to do with the leak).
Daniel
Ferreira Maurizio a écrit :
> The following program (a little excerpt from a bigger program) seems to
> loose system resources at every invocation from a browser. Looking at
> the program with Windows task manager, I see that the program memory
> continues to grow, and that the program acquires a system handle every
> time it receives a request from the browser.
> However the statistic function does not shows any memory growth.
>
> I'm using GNU Prolog 1.3.1 under Windows 2000,
> on a Pentium 4, dual core, 2.80 GHz, 1Gb ram.
>
> Is this a program error or a bug ?
>
> Regards
> Maurizio.
>
> :- initialization(go).
>
> go:-
> socket('AF_INET',Sock),
> socket_bind(Sock,'AF_INET'(_,80)),
> socket_listen(Sock,10),
> main_loop(Sock).
>
> main_loop(Sock) :-
> repeat,
> socket_accept(Sock,Sin,Sout),
> set_stream_type(Sout,binary),
> try_comunications(Sin,Sout),
> close(Sin),
> close(Sout),
> fail.
>
> try_comunications(_Sin,Sout):-
> %%%%%% ...... Skipped reading and analizing request ......
> send_text(Sout,"OK").
>
> %% ------------------------------------------------------ %%
>
> send_text(Sout,Message):-
> send_message(Sout,"200 OK","Text/Html",Message).
>
> send_message(Sout,Rcode,Contype,Message):-
> send_message_header(Sout,Rcode,Contype,Message,"").
>
> send_message_header(Sout,Rcode,Contype,Message,Header):-
> put_bytes(Sout,"HTTP/1.0 "), put_bytes(Sout,Rcode),
> put_bytes(Sout,"\r\n"),
> put_bytes(Sout,"Content-Type: "), put_bytes(Sout,Contype),
> put_bytes(Sout,"\r\n"),
> put_bytes(Sout,Header),
> code_len(Message,Size),
> put_bytes(Sout,"Content-Length: "), put_bytes(Sout,Size),
> put_bytes(Sout,"\r\n\r\n"),
> put_bytes(Sout,Message).
>
> code_len(Message,Len):-
> length(Message,Size),number_codes(Size,Len).
>
> put_bytes(_Sout,[]).
> put_bytes(Sout,[C|R]):- put_byte(Sout,C), put_bytes(Sout,R).
>
>
>
> _______________________________________________
> Bug-prolog mailing list
> [email protected]
> http://lists.gnu.org/mailman/listinfo/bug-prolog
>
>
--
Ce message a ete verifie par MailScanner
pour des virus ou des polluriels et rien de
suspect n'a ete trouve.