On Fri, 20 May 2005, Philip Hazel wrote:

> On Fri, 20 May 2005, Ian FREISLICH wrote:
> 
> > You can do much the same with select().  Just replace my use of
> > poll() with appropriate select() magic.  The purpose of this code
> > snippet was not to demonstrate the use of poll, but non-blocking
> > IO.  When you write to an fd, it may block and you have no idea how
> > much you can write before it will block.  If it's set to O_NONBLOCK,
> > as soon as poll()/select() says you can write without blocking, you
> > write() and write() returns at the point it would block with the
> > number of bytes actually written.
> 
> OK. Point taken.

However, when I came to look at possibly doing something to the code, I 
realized that it is complicated by the TLS case. I am not sure if it is 
even possible to do any kind of blocking check when TLS is in use. So I 
have left the code as it is. Well, almost. While reading it I noticed a 
bug: when a buffer is only partly written by one write() call, Exim was 
re-applying the same timeout to the next write(). This seems wrong, as 
it would allow a very slow acceptor to delay for a very long time. So I 
fixed that.

Philip

-- 
Philip Hazel            University of Cambridge Computing Service,
[EMAIL PROTECTED]      Cambridge, England. Phone: +44 1223 334714.

-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to