3 #include <sys/socket.h>
5 #include <netinet/in.h>
11 struct ftp *ftp_alloc(void)
15 if(!(ftp = malloc(sizeof *ftp))) {
18 ftp->ctl = ftp->data = -1;
22 void ftp_free(struct ftp *ftp)
30 int ftp_connect(struct ftp *ftp, const char *hostname, int port)
33 struct sockaddr_in addr;
35 if((ftp->ctl = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
36 errmsg("failed to create control socket\n");
40 if(!(host = gethostbyname(hostname))) {
41 errmsg("failed to resolve host: %s\n", hostname);
42 closesocket(ftp->ctl);
47 addr.sin_family = AF_INET;
48 addr.sin_addr.s_addr = inet_addr(host->h_addr);
49 addr.sin_port = htons(port);
51 if(connect(ftp->ctl, (struct sockaddr*)&addr, sizeof addr) == -1) {
52 errmsg("failed to connect to: %s (port: %d)\n", hostname, port);
53 closesocket(ftp->ctl);
61 void ftp_close(struct ftp *ftp)
64 closesocket(ftp->ctl);
67 closesocket(ftp->data);
71 int ftp_update(struct ftp *ftp)
76 int ftp_chdir(struct ftp *ftp, const char *dirname)