more experimental work on ftp ipv6

This commit is contained in:
Andrew Pamment 2017-04-05 09:10:03 +10:00
parent 34401dbd7e
commit e598b67c61

View File

@ -782,7 +782,7 @@ int handle_client(struct ftpserver *cfg, struct ftpclient *client, char *buf, in
void init(struct ftpserver *cfg) { void init(struct ftpserver *cfg) {
int server_socket; int server_socket;
struct sockaddr_in server, client, host_addr; struct sockaddr_in6 server, client, host_addr;
fd_set master, read_fds; fd_set master, read_fds;
int fdmax = 0; int fdmax = 0;
socklen_t c; socklen_t c;
@ -790,15 +790,15 @@ void init(struct ftpserver *cfg) {
char buf[1024]; char buf[1024];
int new_fd; int new_fd;
int nbytes; int nbytes;
server_socket = socket(AF_INET, SOCK_STREAM, 0); server_socket = socket(AF_INET6, SOCK_STREAM, 0);
if (server_socket == -1) { if (server_socket == -1) {
fprintf(stderr, "Couldn't create socket..\n"); fprintf(stderr, "Couldn't create socket..\n");
exit(-1); exit(-1);
} }
server.sin_family = AF_INET; server.sin6_family = AF_INET6;
server.sin_addr.s_addr = INADDR_ANY; server.sin6_addr = in6addr_any;
server.sin_port = htons(cfg->port); server.sin6_port = htons(cfg->port);
if (bind(server_socket, (struct sockaddr *)&server, sizeof(server)) < 0) { if (bind(server_socket, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("Bind Failed, Error\n"); perror("Bind Failed, Error\n");
@ -811,7 +811,7 @@ void init(struct ftpserver *cfg) {
FD_SET(server_socket, &master); FD_SET(server_socket, &master);
fdmax = server_socket; fdmax = server_socket;
c = sizeof(struct sockaddr_in); c = sizeof(struct sockaddr_in6);
while (1) { while (1) {
read_fds = master; read_fds = master;
@ -851,10 +851,10 @@ void init(struct ftpserver *cfg) {
} }
getsockname(new_fd, (struct sockaddr*) &host_addr, &c); getsockname(new_fd, (struct sockaddr*) &host_addr, &c);
inet_ntop(AF_INET, &(host_addr.sin_addr), clients[client_count]->hostip, INET_ADDRSTRLEN); inet_ntop(AF_INET6, &(host_addr.sin6_addr), clients[client_count]->hostip, INET6_ADDRSTRLEN);
getpeername(new_fd, (struct sockaddr *)&client, &c); getpeername(new_fd, (struct sockaddr *)&client, &c);
inet_ntop(AF_INET, &(client.sin_addr), clients[client_count]->ip, INET_ADDRSTRLEN); inet_ntop(AF_INET6, &(client.sin6_addr), clients[client_count]->ip, INET6_ADDRSTRLEN);
clients[client_count]->fd = new_fd; clients[client_count]->fd = new_fd;
strcpy(clients[client_count]->current_path, "/"); strcpy(clients[client_count]->current_path, "/");