read from socket question

Jan Schenkel janschenkel at yahoo.com
Tue Oct 10 13:59:08 EDT 2006


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



More information about the use-livecode mailing list