home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume38 / libftp / part01 / FtpConnect.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-13  |  1.2 KB  |  51 lines

  1. #include "FtpLibrary.h"
  2.  
  3. STATUS FtpConnect(FTP **con,char * hostname)
  4. {
  5.   struct sockaddr_in unit;
  6.   register struct hostent *host;
  7.   register struct servent *service;
  8.   register int sock;
  9.   String S1;
  10.   STATUS x;
  11.   
  12.   *con = ( FTP * ) malloc ( sizeof (FTP));
  13.   
  14.   if ((host=gethostbyname(hostname))==0)
  15.     return EXIT((*con),QUIT);
  16.   if ((service=(struct servent *) getservbyname("ftp","tcp"))==0)
  17.     return EXIT((*con),QUIT);
  18.   
  19.   unit.sin_family = host -> h_addrtype;
  20.   
  21.   bcopy(host-> h_addr_list[0],&unit.sin_addr,host->h_length);
  22.   if ( ( sock = socket ( unit.sin_family , SOCK_STREAM , 0)) < 0)
  23.     return EXIT((*con),QUIT);
  24.  
  25.   unit.sin_port = service -> s_port;
  26.  
  27.   while ( connect ( sock , &unit , sizeof unit ) < 0 )
  28.     {
  29.       host -> h_addr_list ++;
  30.       bcopy(host -> h_addr_list[0],&unit,host->h_length);
  31.       close(sock);
  32.       if ( ( sock = socket ( unit.sin_family , SOCK_STREAM , 0)) < 0)
  33.     return EXIT((*con),QUIT);
  34.     }
  35.   
  36.   (*con) -> sock = sock;
  37.   (*con) -> mode = 'A';
  38.   (*con) -> data = 0;
  39.   (*con) -> func = NULL;
  40.   (*con) -> debug = NULL;
  41.   
  42.   if ( (x=FtpGetMessage(*con,S1)) == QUIT )
  43.     return EXIT((*con),QUIT);
  44.   if ( ! FtpGood(x,120,220,EOF))
  45.     {
  46.       close(sock);
  47.       return EXIT((*con),-x);
  48.     }
  49.   return EXIT((*con),x);
  50. }
  51.