[Dovecot] adding a select or a poll?
Since I put my hands on dovecot, I had this recuring problem at startup:
Imap-login would'nt connect to the 'default' socket. I've been strugling with the fact that it would eventually connect on a slow or moderely fast machine but not on a really fast machine.
According to Unixware doc, the FIRST connect ALWAYS returns -1 and errno=EINPROGRESS
AFAICT, imap loop is like this:
while (1) connect if no error bu EINPROGRESS send_handshake if successfull break; end while
Now, I think the time between connect and send_handshake might be too short for async connect to finish in most case.
I recognize is a Unixware probleme but I think this senario can happen on any system that CAN set errno to EINPROGRESS.
I think the two possibilities are 1 - remove the setting of NONBLOCK before connecting to unix sock, but that would ruin the way dovecot is written. 2 - add a poll or a select before send_handshake to be sure the socket is writable.
The third way would be to tell unixware users to disable async connects methink would be a pitta.
What do you think?
-- Olivier PRENANT Tel: +33-5-61-50-97-00 (Work) 15, Chemin des Monges +33-5-61-50-97-01 (Fax) 31190 AUTERIVE +33-6-07-63-80-64 (GSM) FRANCE Email: ohp@pyrenet.fr
Make your life a dream, make your dream a reality. (St Exupery)
participants (1)
-
ohp@pyrenet.fr