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