home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mmdf / mmdf-IIb.43 / src / smtp / tcp.4.2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-02-28  |  1.6 KB  |  74 lines

  1. /*
  2.  *        T C P . 4 . 2 . C
  3.  *
  4.  *    Open a TCP/SMTP connection using Berkeley 4.2 style networking.
  5.  *
  6.  *    Doug Kingston, 3 Jan 83 at BRL.
  7.  */
  8. #include "util.h"        /* includes <sys/types.h>, and others */
  9. #include "mmdf.h"
  10. #include <sys/socket.h>
  11. #include <netinet/in.h>
  12. #include <netdb.h>
  13.  
  14. extern LLog *logptr;
  15. extern int errno;
  16.  
  17. /*ARGSUSED*/
  18. tc_uicp (addr, sock, timeout, fds)
  19. long addr;
  20. long sock;    /* IGNORED */    /* absolute socket number       */
  21. int timeout;            /* time to wait for open        */
  22. Pip *fds;
  23. {
  24.     register int skt;
  25.     struct sockaddr_in haddr;
  26.     short    smtpport = 0;
  27. #ifdef notdef
  28.     int    on = 1;
  29. #endif
  30.  
  31.     if (smtpport == 0) {
  32.         struct servent *sp;
  33.  
  34.         if ((sp = getservbyname("smtp", "tcp")) == NULL)
  35.             return (RP_NO);
  36.         smtpport = (short)sp->s_port;
  37.     }
  38.  
  39.     haddr.sin_family = AF_INET;
  40.     haddr.sin_port = smtpport;
  41.     haddr.sin_addr.s_addr = htonl(addr);
  42.  
  43.     skt = socket( AF_INET, SOCK_STREAM, 0 );
  44.     if( skt < 0 ) {
  45.         ll_log( logptr, LLOGFST, "Can't get socket (%d)", errno);
  46.         return( RP_LIO );
  47.     }
  48.  
  49. #ifdef notdef
  50.     if (setsockopt (skt, SOL_SOCKET, SO_DONTLINGER, &on, sizeof on)) {
  51.         ll_log( logptr, LLOGFST, "Can't set socket options (%d)", errno);
  52.         close (skt);
  53.         return( RP_LIO );
  54.     }
  55. #endif /* notdef */
  56.     
  57.         if (setjmp(timerest)) {
  58.             close(skt);
  59.             return ( RP_TIME );
  60.         }
  61.         
  62.         s_alarm( (unsigned) timeout );
  63.     if( connect(skt, &haddr, sizeof haddr) < 0 ) {
  64.         close( skt );
  65.         s_alarm( 0 );
  66.         ll_log( logptr, LLOGFST, "Can't get connection (%d)", errno);
  67.         return( RP_DHST );
  68.     }
  69.     s_alarm( 0 );
  70.     fds -> pip.prd = skt;
  71.     fds -> pip.pwrt = dup(skt);
  72.     return (RP_OK);
  73. }
  74.