1. You read the data from the client socket. Essentially,
the order goes something like this:
- the server accepts a request from the client and
receives a filehandle
- the server reads from the filehandle just as it would
from any filehandle (ie., using <>, or read, etc.)
- you read the GET or POST line, then the request
headers, then a blank line (end of headers); you should
look for a Content-Length header, which will tell you
how long the POST content should be. Then read that much
content.
2. I'm not sure exactly how you can trap a client closing
the socket; do you mean if the socket is closed normally,
or do you mean if the socket is closed because the client
hit the Stop button, for example? In the former case, you
should basically close the socket once you've written out
the response, I think. In the latter case, I *think* you
can try to catch a $SIG{PIPE} on write attempts to the
client. So set up a $SIG{PIPE} to catch such writes and
close the socket.
You might also take a look at HTTP::Daemon (part of LWP),
if not to use it, then just to study it for your own
uses.