Ensure socket is nonblocking before draining. Bug 1914
[exim.git] / src / src / daemon.c
index 35e61dbfde9e9086946914e5bd44dc4feed93670..bc33aec45619dc9a13acb9393c74c0d041225928 100644 (file)
@@ -520,12 +520,13 @@ if (pid == 0)
       {
       if (smtp_out)
        {
-       int i;
+       int i, fd = fileno(smtp_in);
        uschar buf[128];
 
        mac_smtp_fflush();
        /* drain socket, for clean TCP FINs */
-       for(i = 16; read(fileno(smtp_in), buf, sizeof(buf)) > 0 && i > 0; ) i--;
+       if (fcntl(fd, F_SETFL, O_NONBLOCK) == 0)
+         for(i = 16; read(fd, buf, sizeof(buf)) > 0 && i > 0; ) i--;
        }
       search_tidyup();
       smtp_log_no_mail();                 /* Log no mail if configured */