From: Greg B. <gre...@gm...> - 2007-11-13 15:53:36
|
Hi,Is it possible to know when a socket connection are closing ? In a comet-style web application (using appmods) I have to hold the connection and wait for a mnesia event with |
From: Claes W. <kl...@ta...> - 2007-11-13 15:57:04
|
Greg Burri wrote: > Hi, > Is it possible to know when a socket connection are closing ? > In a comet-style web application (using appmods) I have to hold the > connection and wait for a mnesia event with > Absolutely, you have full access to the socket. It's in the #arg{} record for you to use as you wish. /klacke |
From: Greg B. <gre...@gm...> - 2007-11-16 17:40:53
|
Re, I'm sorry but the half of my initial message hasn't been send (why? I don't know). I was saying that I knew about the #arg.clisock but I didn't know how can I receive the message {tcp_closed, S}. here is the doc about inet and {tcp_socket, S} : http://www.erlang.org/doc/man/inet.html I have a such structure for my comet-style application (it's very simplified) : out(A) -> [..] mnesia:subscribe({table, minichat, simple}) loop(), [..] loop() -> {mnesia_table_event, {write, _, _}} -> mnesia:unsubscribe({table, minichat, simple}); _ -> loop() after 1000 * 60 * 60 -> % (1 hour) because I don't know when the tcp socket will be closed mnesia:unsubscribe({table, minichat, simple}) end. [..] Basically I just want to add a {tcp_closed, _} to the receive statement but it doesn't work. Do you have any idea about this problem ? Thanks in advance Greg On Nov 13, 2007 4:56 PM, Claes Wikstrom < kl...@ta...> wrote: > Greg Burri wrote: > > Hi, > > Is it possible to know when a socket connection are closing ? > > In a comet-style web application (using appmods) I have to hold the > > connection and wait for a mnesia event with > > > > Absolutely, you have full access to the socket. It's in the > #arg{} record for you to use as you wish. > > > /klacke > |
From: Claes W. <kl...@ta...> - 2007-11-16 23:12:35
|
> I was saying that I knew about the #arg.clisock but I didn't know how > can I receive the message {tcp_closed, S}. > here is the doc about inet and {tcp_socket, S} All yaws socket are in passive mode, this means that once your out(Arg) function returns, the yaws server will invoke gen_tcp:recv() on the socket. In your case, where you ajaxyy, want more control over the socket and in particular when it gets closed, you need to tell the socket to go into active mode by invoking inet:setopts() on the socket. However, be aware, if you receive regular HTTP traffic on the socket you will either have to process the data yourself or .... well no remedy. However if all you expect is the closed message you should be fine. Once you have receive the closed you can call exit(normal) and all will be fine. An alternative is to return 'ok' , but then yaws will subsequently invoke gen_tcp:recv() which will fail and this might result in an a log entry which you don't want, thus call exit(normal) once you have picked upp the closed message. /klacke |
From: Greg B. <gre...@gm...> - 2007-11-17 00:15:44
|
(I forgot to cc the mailing list) ---------- Forwarded message ---------- From: Greg Burri <gre...@gm...> Date: Nov 17, 2007 1:13 AM Subject: Re: [Erlyaws-list] Socket question To: Claes Wikstrom <kl...@ta...> Thanks for you answer. If I receive a event from mnesia after waiting for either a closed message or an mnesia event I have to send a HTTP respond. Actually I just return {content, "text/xml", SomeXML} from out/1. If I use inet:setopts() to take the control of the socket then I have to build my own HTTP header and so one... not so funny ;). Is it possible to add a "closed" message from yaws to my process like just {closed, Reason} ? It seems to be useful in some cases. Or is there any other way to solve this problem ? Greg On Nov 17, 2007 12:12 AM, Claes Wikstrom <kl...@ta...> wrote: > > > I was saying that I knew about the #arg.clisock but I didn't know how > > can I receive the message {tcp_closed, S}. > > here is the doc about inet and {tcp_socket, S} > > > All yaws socket are in passive mode, this means that once your > out(Arg) function returns, the yaws server will invoke gen_tcp:recv() > on the socket. > > In your case, where you ajaxyy, want more control over the > socket and in particular when it gets closed, you need to tell > the socket to go into active mode by invoking inet:setopts() > on the socket. > > However, be aware, if you receive regular HTTP traffic on the socket > you will either have to process the data yourself or .... well > no remedy. > > However if all you expect is the closed message you should be fine. > Once you have receive the closed you can call exit(normal) and all will > be fine. An alternative is to return 'ok' , but then yaws will > subsequently > invoke gen_tcp:recv() which will fail and this might result in an a > log entry which you don't want, thus call exit(normal) once you > have picked upp the closed message. > > > > > /klacke > |
From: Jilani K. <ji...@ch...> - 2011-04-16 08:40:17
|
Hi All, while compiled CGI apps work fine with YAWS, I have some troubles with those written in interpreted languages like Ruby and Lua. For example: -------------- #!/usr/local/bin/ruby require 'cgi' cgi=CGI.new() h = cgi.params Risp = h['Risp'] codice = h['codice'] print("Contect-type: text/html\n\n") puts(Risp) puts(codice) -------------- I gave a .cgi extenstion to this script has and put it in the docroot. Calling the script from a HTML pages works fine with Cherokee and Xitami web servers but not with YAWS where I have just a blank page without any kind of error (running YAWS in interactive mode). YAWS conf file is: ... <server pagaso> port = 8080 listen = 0.0.0.0 docroot = /yaws/www allowed_scripts = yaws cgi appmods = <cgi-bin, yaws_appmod_cgi> </server> ... Any hint? -- Jilani KHALDI --------------------- ** Vindex Architecture http://www.vindexa.org |
From: Jilani K. <ji...@ch...> - 2011-04-16 10:32:41
|
On 16/04/2011 10.14, Jilani Khaldi wrote: > Hi All, > while compiled CGI apps work fine with YAWS, I have some troubles with > those written in interpreted languages like Ruby and Lua. For example: > > -------------- > #!/usr/local/bin/ruby > > print("Contect-type: text/html\n\n") print("Content-type: text/html\n\n") It was a stupid typo. Sorry :-( -- Jilani KHALDI --------------------- ** Vindex Architecture http://www.vindexa.org |
From: Claes W. <kl...@ta...> - 2007-11-18 20:39:00
|
Greg Burri wrote: > > If I use inet:setopts() to take the control of the socket then I have to > build my own HTTP header and so one... not so funny ;). > Agreed, > Is it possible to add a "closed" message from yaws to my process like > just {closed, Reason} ? It seems to be useful in some cases. Or is there > any other way to solve this problem ? > > Don't understand the question. /klacke |
From: Bob I. <bo...@re...> - 2007-11-18 20:58:17
|
On 11/18/07, Claes Wikstrom <kl...@ta...> wrote: > Greg Burri wrote: > > > > > If I use inet:setopts() to take the control of the socket then I have to > > build my own HTTP header and so one... not so funny ;). > > > > Agreed, This might be easier to do with mochiweb's API... but anyway, wouldn't it be easier to monitor the process instead of trying to listen to the socket directly? -bob |