4 #include <sys/socket.h>
6 #include <netinet/in.h>
14 #define closesocket(s) close(s)
17 struct ftp *ftp_alloc(void)
21 if(!(ftp = malloc(sizeof *ftp))) {
24 ftp->ctl = ftp->data = -1;
28 void ftp_free(struct ftp *ftp)
36 int ftp_connect(struct ftp *ftp, const char *hostname, int port)
39 struct sockaddr_in addr;
41 if((ftp->ctl = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
42 errmsg("failed to create control socket\n");
46 if(!(host = gethostbyname(hostname))) {
47 errmsg("failed to resolve host: %s\n", hostname);
48 closesocket(ftp->ctl);
53 memset(&addr, 0, sizeof addr);
54 addr.sin_family = AF_INET;
55 addr.sin_addr = *((struct in_addr*)host->h_addr);
56 addr.sin_port = htons(port);
58 if(connect(ftp->ctl, (struct sockaddr*)&addr, sizeof addr) == -1) {
59 errmsg("failed to connect to: %s (port: %d)\n", hostname, port);
60 closesocket(ftp->ctl);
67 void ftp_close(struct ftp *ftp)
70 closesocket(ftp->ctl);
73 closesocket(ftp->data);
77 int ftp_update(struct ftp *ftp)
82 int ftp_chdir(struct ftp *ftp, const char *dirname)