[Prev][Next][Index][Thread]

porting qmail to Sequent Dynix/ptx 3.2.0/TLI socket emulation library



Hello-

I'm trying to port qmail 1.01 to Sequent Dynix/ptx version 3.2.0 (sort of
sysVr<4ish using the TLI socket emulation library).  After some work I
have gotten it to compile, but it only passes the preinstallation tests
that send messages to the local machine.  Some investigation shows that
the problem is with qmail-remote.  I'm sure the problem has to do with the
poor socket emulation library, but I'm really stumped for any ideas of how
to fix it beyond waiting for this machine to reach the end of its useful
life (sometime this year, thank god!)  Does anyone have qmail running on
any similar machine or have any suggestions for what I can do?

More details about what I'm seeing below.

Thanks, 
Julie

-------------------------------------------------------------------------------
Julie L. Baumler                    | Card Catalog Public Access
System Administrator PSULIB         | telnet psulib.cc.pdx.edu
Portland State University           | login: dialin
Voice: (503) 725-3369               | password: psu
Email: a4jb@xxxxxxxxxxxxxxxxx       |
-------------------------------------------------------------------------------


The error message from qmail-remote is:

ZSystem resources temporarily unavailable. (#4.3.0)

By the graces of DBX, I can see that this is coming from line 417 of
qmail-remote.c: 

 if (ipme_init() != 1) temp_oserr();

DBX also shows me that when reading from the socket, in ipme_init, it
never gets anything and eventually drops out at line 62 of ipme.c when len
gets to be over 200000

from ipme.c:

lines 49-64 of ipme_init():

  if ((s = socket(AF_INET,SOCK_STREAM,0)) == -1) return -1;
 
  len = 256;
  for (;;) {
    if (!stralloc_ready(&buf,len)) { close(s); return 0; }
    buf.len = 0;
    ifc.ifc_buf = buf.s;
    ifc.ifc_len = len;
    if (ioctl(s,SIOCGIFCONF,&ifc) >= 0) /* > is for System V */
      if (ifc.ifc_len + sizeof(*ifr) + 64 < len) { /* what a stupid interface */
        buf.len = ifc.ifc_len;
        break;
      }
    if (len > 200000) { close(s); return -1; }
    len += 100 + (len >> 2);
  }


Follow-Ups: