Tanaka Akira <akr / m17n.org> writes:

> In article <87pt1zav3o.fsf / igloo.phubuh.org>,
>   Mikael Brockman <mikael / phubuh.org> writes:
> 
> >> Your example is quite special.  Usually, when writing servers that
> >> serve huge chunks of data (like HTTP servers that also serve binary
> >> content, e.g. for download) then the usual (and proper) approach is to
> >> copy the file in chunks.  Nobody writes a server that reads a 1GB file
> >> into memory first before sending it over the line.
> >
> > True.  The files I'm sending are only a couple of megabytes.  Still
> > takes a long time to send to, say, someone on 56K.
> 
> An evil user may connect your server without reading.
> 
> % ruby -rsocket -e 'TCPSocket.open("your-server", 12345); sleep'
> 
> If the server writes to such client and TCP window is fill up, the
> server process (including other threads) may blocks.
> 
> So I don't think it's negligible.
> I think this problem should be solved by nonblocking flag.
> 
> I'm not sure that nonblocking flag is easy enough to use in Ruby,
> though.

It is with Multiplexer. :-)