home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / networking / amitcp / amitcp_tnserv.lha / tnserv / tnserv.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-15  |  2.2 KB  |  94 lines

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <proto/socket.h>
  5. #include <netdb.h>
  6. #include <errno.h>
  7. #include <dos/dos.h>
  8. #include <dos/dostags.h>
  9. #include <proto/dos.h>
  10. #include <proto/exec.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <stdlib.h>
  14.  
  15. struct Library *SocketBase=NULL;
  16. #define bzero(base,n) memset(base,0,n)
  17. #define bcopy(from,to,n) memcpy(to,from,n)
  18.  
  19. void Quit(int retcode)
  20. {
  21.     
  22.     if (SocketBase) CloseLibrary(SocketBase);
  23.     exit(retcode);
  24. }
  25.  
  26. struct Process *MyCreateNewProcTags(ULONG Tag0,...)
  27. {
  28.     return CreateNewProc((struct TagItem *)&Tag0);
  29. }
  30.  
  31. void main(void)
  32. {
  33.     struct servent *sp;
  34.     struct sockaddr_in ServAddr;
  35.     int Socket,SubSock;
  36.     LONG SubSockID;
  37.     int WaitSig;
  38.     static char ArgStr[200];
  39.     BPTR TelNetProg;
  40.     long Len;
  41.     
  42.     SocketBase=OpenLibrary("bsdsocket.library",2);
  43.     
  44.     if (!SocketBase) Quit(20);
  45.     
  46.     sp=getservbyname("telnet","tcp");
  47.     if (!sp) Quit(21);
  48.     
  49.     bzero(&ServAddr,sizeof(ServAddr));
  50.     ServAddr.sin_port=sp->s_port;
  51.     ServAddr.sin_addr.s_addr=htonl(INADDR_ANY);
  52.     ServAddr.sin_family=AF_INET;
  53.     ServAddr.sin_len=sizeof(ServAddr);
  54.     Socket=socket(AF_INET,SOCK_STREAM,0);
  55.     if (Socket < 0) Quit(22);
  56.     bind(Socket,&ServAddr,sizeof(ServAddr));
  57.     listen(Socket,5);
  58.     WaitSig=AllocSignal(-1);
  59.     if (WaitSig==-1) Quit(23);
  60.     
  61.     
  62.     for (;;) {
  63.         Len=sizeof(ServAddr);
  64.         SubSock=accept(Socket,&ServAddr,&Len);
  65.         if (SubSock < 0) {
  66.             if (Errno()==EINTR) {
  67.                 CloseSocket(Socket);
  68.                 Quit(0);
  69.             }
  70.             continue;
  71.         }
  72.         SetSignal(0,(1<<WaitSig)); /* unset WaitSig signal */
  73.         SubSockID=ReleaseSocket(SubSock,UNIQUE_ID);
  74.         sprintf(ArgStr,"%u %u %u",(unsigned long)SubSockID,(unsigned long)WaitSig,(unsigned long)FindTask(NULL));
  75.         TelNetProg=LoadSeg("tnserv:TelnetGetty");
  76.         if (!TelNetProg) TelNetProg=LoadSeg("TelnetGetty/TelnetGetty");
  77.         if (!TelNetProg) TelNetProg=LoadSeg("TelnetGetty");
  78.         if (!TelNetProg) TelNetProg=LoadSeg("AmiTCP:Bin/TelnetGetty");
  79.         if (TelNetProg) {
  80.             if (MyCreateNewProcTags(NP_Seglist,TelNetProg,
  81.                 NP_Name,"telnet login",
  82.                 NP_Arguments,ArgStr,
  83.                 NP_StackSize,12000,
  84.                 NP_FreeSeglist,TRUE,
  85.                 TAG_END)) {
  86.                 
  87.                 /*CreateProc("telnet login",0,TelNetProg,12000);*/
  88.                 Wait(1<<WaitSig); /* Wait for new proc to start up */
  89.             }
  90.         }
  91.     }
  92.     
  93. }
  94.