Hello Scott and y'all,
I have a persistant problem with the "post url" syntax of MetaCard 2.5, as I did with 2.4 as well. The client is a MetaCard 2.5 stack with the following handler in a button :
on mouseUp put "http://www.giguere.uqam.ca/" into myHost put myHost & "XA/MenusXApost.cgi" into myURL if the openSockets is empty then post field 1 to url myURL if the result is not empty then answer the result else answer it else beep end if end mouseUp
The CGI program on the server-side is a HyperCard-based CGI which performs marvelously. It returns the minimum set of HTTP headers required by MetaCard. The proof of this is that the first click on the above button indeed returns what it is supposed to. Btw, I am using Webstar 2.1 on MacOS 8.6 on the server-side.
The problem arises after the first click of this button. On the second and subsequent clicks of this button, the handler beeps, e.g. the openSockets is not empty which, IOW, means that the socket remains open after the first click. In fact, it (the socket) *never* closes, and this inhibits it from doing its thing more than once.
My diagnostic, therefore, is that there is a bug in MC's post command whereby the socket that is opened is never closed. Please fix this *bug* by making the socket close automatically ASAP after the reply is received by the MC client. Or give us the new syntax we need to *close* the open sockets ourselves.
If you disbelieve my account, then feel free to download a copy of my client stack which exhibits this problem :
I believe you. But the behavior is intentional. By default, the libUrl script doesn't close the socket after completing a request. This allows re-use of the same socket which is useful if you are making a series of requests to the same server, and is in line with the HTTP 1.1 spec. (The socket will eventually get closed by the server.)
Is there any reason that you need to check that the openSockets is empty? If it's just to prevent someone clicking on the button again while the request is being handled, you could disable the button at the top of the script and re-enable it after the request has completed.
But if you really want to have the socket closed after the post competes, then the "proper" way would be to set the httpHeaders as follows:
set the httpHeaders to "Connection: close"
If you do this, the server should immediately close the socket after completing the post request (assuming the server is HTTP 1.1 compliant -- I don't know about Webstar 2.1)
Cheers Dave
_______________________________________________ metacard mailing list [EMAIL PROTECTED] http://lists.runrev.com/mailman/listinfo/metacard
