8 #define netread(fd, ptr, len) read(fd, ptr, len)
9 #define netwrite(fd, ptr, len) write(fd, ptr, len)
10 #define netclose(fd) close(fd)
13 #define netread(fd, ptr, len) recv(fd, ptr, len, 0)
14 #define netwrite(fd, ptr, len) send(fd, ptr, len, 0)
15 #define netclose(fd) closesocket(fd)
18 // FIXME: currently I/O is unbuffered
20 #define KNF_TYPE_LOCAL 1
21 #define KNF_TYPE_FTP 2
22 #define KNF_TYPE_HTTP 3
24 typedef struct knetFile_s {
29 // the following are for FTP only
30 int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready;
31 char *response, *retr, *size_cmd;
32 int64_t seek_offset; // for lazy seek
35 // the following are for HTTP only
36 char *path, *http_host;
39 #define knet_tell(fp) ((fp)->offset)
40 #define knet_fileno(fp) ((fp)->fd)
47 int knet_win32_init();
48 void knet_win32_destroy();
51 knetFile *knet_open(const char *fn, const char *mode);
54 This only works with local files.
56 knetFile *knet_dopen(int fd, const char *mode);
59 If ->is_ready==0, this routine updates ->fd; otherwise, it simply
62 off_t knet_read(knetFile *fp, void *buf, off_t len);
65 This routine only sets ->offset and ->is_ready=0. It does not
66 communicate with the FTP server.
68 off_t knet_seek(knetFile *fp, off_t off, int whence);
69 int knet_close(knetFile *fp);