read from socket question

kee nethery kee at kagi.com
Tue Oct 10 14:10:00 EDT 2006


it's a good suggestion and one I have not tried. Thanks I'll give it  
a try and report back.
Kee


On Oct 10, 2006, at 10:59 AM, Jan Schenkel wrote:

> --- kee nethery <kee at kagi.com> wrote:
>> I am using Andre Garzia's wonderful RevHTTPd code to
>> create a small
>> slave server to provide a service for other master
>> servers. In
>> general it works well except, one of the master
>> servers does
>> something funny but totally legit when it sends a
>> POST to the slave
>> RevHTTPd server and most times the RevHTTPd server
>> deals with it, and
>> sometimes not. This is a read from socket question
>> and I could use help.
>>
>> [snip]
>>
>> The slave server code is very simple:
>>
>> on httpStart
>>    accept connections on port 8080 with message
>> "newConnection"
>> end httpStart
>>
>> on newConnection pSocketID
>>    read from socket pSocketID with message
>> "processRequest"
>>    -- message is actually doing a "processRequest
>> pSocketID,it" where
>> it contains all the data gathered by the socket.
>> end newConnection
>>
>> on processRequest pSocketID, pSocketData
>>    global theSocketData
>>    put pSocketData into theSocketData
>>    -- then from here on down it parses theSocketData
>> and does a reply
>> to the master server
>>
>>
>
> Hi Kee,
>
> While I was building the database router server app
> that I showed at RevConWest, I encountered similar
> problems. Try something like this:
>
> local sSocketDA -- data array
>
> on httpStart
>   accept connections on port 8080 \
>       with message "newConnection"
> end httpStart
>
> on newConnection pSocketID
>   read from socket pSocketID until CRLF \
>       with message "ReadRequest"
> end newConnection
>
> on ReadRequest pSocketID, pSocketData
>   put pSocketData into sSocketDA[pSocketID,"request"]
>   read from socket pSocketID until CRLF & CRLF \
>       with message "ReadHeaders"
> end ReadRequest
>
> on ReadHeaders pSocketID, pSocketData
>   put pSocketData into sSocketDA[pSocketID,"headers"]
>   read from socket pSocketID until empty \
>       with message "ProcessRequest"
> end ReadHeaders
>
> on processRequest pSocketID, pSocketData
>   global theSocketData
>   put sSocketDA[pSocketID,"request"] & CRLF & \
>       sSocketDA[pSocketID,"headers"] & CRLF & CRLF & \
>       pSocketData into theSocketData
>   -- ... carry on and process ...
> end processRequest
>
> ##
>
> This approach seems to give the sockets breathing
> room. For extra safety, you could parse the headers,
> look for the Content-length header and read from the
> socket 'for x chars' instead of 'until empty'.
>
> Don't forget to clean up the data in the array after
> you've written back the result, of course ;-)
>
> Hope this helped,
>
> Jan Schenkel.
>
> Quartam Reports for Revolution
> <http://www.quartam.com>
>
> =====
> "As we grow older, we grow both wiser and more foolish at the same  
> time."  (La Rochefoucauld)
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your  
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution




More information about the use-livecode mailing list