10 Aug
2011
10 Aug
'11
8:37 p.m.
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())