Whatever workarounds ppl on fora have or however you wanna say it better, it comes down to the fact that the TCL socket -server command fails.
Sockets block totally from doing anything after a while, so a tcl prog would easily be DDOSed by a single ip.
Appearantly it's been going on like that since version 8.4.1. and now 8.5.2. does still pretty much the same.
I hate to say it as tcl was always an extension for me, and it's the only language i can program in, but due to this it isn't really much more as a scripting language..AMG
: Try nonblocking I/O. Many pure-Tcl
web servers exist. I know, I wrote one of them. It can handle multiple clients simultaneously. The trick is in how you write your [socket
-server] callback procedure. It should initialize a few things then get out of the way, returning to the event loop; it should not
do any potentially blocking I/O of its own. Of course, it will need to do some I/O, but it should go through the nonblocking mechanisms. That means [fconfigure
]'ing the socket to have -blocking 0, then using [fileevent
] to schedule another callback for handling incoming data. The same goes for the [fileevent] callback: use only nonblocking I/O.
If you've tried all that and still have trouble, please post a small code example showing the problem.DKF
: Googling finds good instructions as the top
hit. Even the puts
page here talks about non-blocking IO. To conclude that Tcl doesn't support it… smells like either very poor research, or trolling.