How about using the -S and -p operators on STDIN?
in reply to How was my script launched?
If your program was invoked by a TCP server (like inetd), then -S STDIN should be true. If it was invoked by a web server then -p STDIN is likely to be true (check this). And if it is taking input from a user then -t STDIN (or perhaps -c STDIN) should be true.
You can also check for environment variables to help decide how you were invoked. For instance, if you are being invoked as a CGI script, the web server will set up a lot of variables that won't be set if you are handling the connection yourself. Same for an interactive session.