[Exim] Exim hangs when called from localhost

Top Page
Delete this message
Reply to this message
Author: Michael Wells
Date:  
To: exim-users
Subject: [Exim] Exim hangs when called from localhost
Hi,

I've been having some problems with a new Exim installation, and
wondered if anyone could spare a moment to help.

I'm building on FreeBSD 4.3 with an SMP machine, Exim 3.33 with
OpenSSL/TLS and PostgreSQL support compiled in. Exim compiles
cleanly and works nicely as a detached daemon (called with
/usr/exim/bin/exim -bd). I am using a custom FreeBSD kernel with
no IPv6 support.

When I try telneting to port 25 from localhost, I get about a 10
second delay before Exim eventually sends its header. I am confused
about this as I've got a working DNS in place, and /etc/host.conf
(nsswitch.conf) is configured appropriately. Connecting to 127.0.0.1
or any local IP addresses gives me this problem, but if I connect
via any other internet IP address, Exim responds immediately.

I have an IP firewall running on the server, which has been tested
pretty thoroughly and should allow freedom to local users using
loopback interfaces to talk to Exim. If necessary I can provide more
details about the firewall.

Eventually I ran ktrace, to look at Exim's system calls . The section
below is just after Exim forked to respond to my telnet on
localhost 25. What does "connect -1 errno 36 Operation now in progress"
mean to anyone; is there something about this that suggests a problem
with the bind?

Hope this is a simple one. Cheers,
Michael

------------

Issued command: telnet localhost 25
Ktrace output after Exim forks:

<cut for brevity>

 71111 exim     CALL  select(0x1,0xbfbff25c,0,0,0)
 37486 exim     RET   fork 0
 37486 exim     CALL  getsockname(0x1,0xbfbff1e0,0xbfbff188)
 37486 exim     RET   getsockname 0
 37486 exim     CALL  close(0)
 37486 exim     RET   close 0
 37486 exim     CALL  sigaction(0x14,0xbfbff12c,0xbfbff114)
 37486 exim     RET   sigaction 0
 37486 exim     CALL  getpeername(0x1,0xbfbff0b4,0xbfbff0b0)
 37486 exim     RET   getpeername 0
 37486 exim     CALL  getsockname(0x1,0xbfbff0c4,0xbfbff0b0)
 37486 exim     RET   getsockname 0
 37486 exim     CALL  socket(0x2,0x1,0)
 37486 exim     RET   socket 0
 37486 exim     CALL  fcntl(0,0x3,0)
 37486 exim     RET   fcntl 2
 37486 exim     CALL  fcntl(0,0x4,0x6)
 37486 exim     RET   fcntl 0
 37486 exim     CALL  setsockopt(0,0xffff,0x80,0xbfbfee8c,0x8)
 37486 exim     RET   setsockopt 0
 37486 exim     CALL  setsockopt(0,0xffff,0x4,0xbfbfee88,0x4)
 37486 exim     RET   setsockopt 0
 37486 exim     CALL  bind(0,0xbfbff024,0x10)
 37486 exim     RET   bind 0
 37486 exim     CALL  connect(0,0xbfbff014,0x10)
 37486 exim     RET   connect -1 errno 36 Operation now in progress
 37486 exim     CALL
select(0x400,0xbfbfef94,0xbfbfef14,0xbfbfee94,0xbfbff06c)
 37486 exim     RET   select 0
 37486 exim     CALL  close(0)
 37486 exim     RET   close 0
 37486 exim     CALL  getsockopt(0x1,0,0x1,0xbfbff128,0xbfbff020)
 37486 exim     RET   getsockopt 0
 37486 exim     CALL  setsockopt(0x1,0xffff,0x8,0xbfbff01c,0x4)
 37486 exim     RET   setsockopt 0
 37486 exim     CALL  open(0x282e74fc,0,0x1b6)
 37486 exim     NAMI  "/etc/hosts"
 37486 exim     RET   open 0
 37486 exim     CALL  fstat(0,0xbfbfede4)
 37486 exim     RET   fstat 0
 37486 exim     CALL  break(0x80de000)
 37486 exim     RET   break 0
 37486 exim     CALL  read(0,0x80dc000,0x2000)


<cut for brevity>