LINUX.ORG.RU

Разработка ftp client


0

0

Для передачи данных (например при команде LIST) решил использовать PASV команду - те заставлять создавать сервер отрывать еще один порт. Нет ли тут подводных камней ? Может лучше передавать свой открытый порт с помощью команды PORT ? Вот только тут не понятно как создать соединение и сделать bind на свободный порт ? Как этот свободный порт узнать или как заставить свободный порт использовать и потом его узнать чтобы передать с помощью команды PORT ???

anonymous

Подозреваю что лучше использовать PORT вместо PASV чтобы не было конфликтов с различными proxy и файрволлами. Я прав ?

anonymous
()

Вообщем я все таки нашел как выделять первый свободный порт и узнавать какой это порт:

server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
if (argc == 1)
server.sin_port = htons(0);
else
server.sin_port = htons(atoi(argv[1]));

/*** Create socket on which to send and receive ***/
sd = socket (AF_INET,SOCK_DGRAM,0);
bind( sd, (SA *) &server, sizeof(server) );

/*** get port information and prints it out ***/
length = sizeof(server);
getsockname (sd, (SA *)&server,&length) );
printf("Server Port is: %d\n", ntohs(server.sin_port));

anonymous
()

Остается вопрос какой адрес указывать в команде PORT ? Ведь при создании сокета выбиралось INADDR_ANY

anonymous
()
Ответ на: комментарий от anonymous

Все понял - надо брать getsockname от сокета команд чтобы узнать свой адрес.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.