[comp.unix.wizards] Some Wizardry in need

suresh@lama.enet.dec.com (Suresh Subramanian) (02/15/91)

    The scenario goes like this

      if  (!fork()) {
        fd = socket(.....); /* Unix domain */
        bind and listen for connection
         accept(...)
          close(0) dup2(fd,0);
          close(1); dup2(fd,1);
          close(2); dup2(fd,2);
         execl("tip", "tip", args, (char *)0);   /*  standard unix tip, */
     } else {
         sock = socket(...)       
        connect(...);
        parent process goes on and exits.
    }
(SIGCLD is also installed for notifying child's death)

   The main program is kind of a supervisor. Keeps waiting for user
input and does appropriate
    actions.  The problem I am facing is this:-

   1) When a user wants to login to a another machine he calls the above
mentioned function.
         I go ahead and exec tip and wait for tip to make the connection
and send me a "login:"
      prompt. I get it and all goes well.
   
      But if the number dialled by tip is a lat then  I will not
      get the standard login prompt. But instead I will get the LAT
prompt and tip will be waiting
      for input from the user. Now the supervisor (that's me) should
know that I have to get the
      input from the user and send it to tip.  But  I don't know that
since I did not get the standard
      "login: " prompt but a LAT prompt. I cannot forsee all possible
lat prompts. 

      An elegant solution would be to get signal from tip, when it is
waiting to do IO.  I know there
      is SIGIO to do that. But I have execed tip within a child process.
So the function address that
      I pass to signal system call before execing tip is now meaningless
within the tip program.

       A solution is to modify tip  to send SIGIO. But is there any
other way to get the job done?

Many Thanks for any insight

Suresh