On 2.8.2011, at 5.25, SATOH Fumiyasu wrote: >>> Dovecot ignores EINPROGRESS on connect(2) for non-blocking fd. >>> This is wrong. After that, read(2) to fd (or write(2) to fd) fails >>> with ENOTCONN if the connection of fd is not completed. >>> >>> The attached patch fixes this problem.
If you do that, then there's no point in making the socket non-blocking before connect(). > On a high-load Solaris 10 box, dovecot-lda fails to query (I/O) to > dovecot dict socket with ENOTCONN. My patch fixes this problem. I think Linux/etc returns EAGAIN in such situation. Maybe the right fix is to just add EINPROGRESS check for net_connect_unix_with_retries()? (With some extra changes so that it actually sees that errno from net_connect_unix())