examples/ftpd: Add support for choosing address family
choose the network protocol (ipv4 or ipv6) to bind network in setting ftpd Signed-off-by: wangchen <wangchen41@xiaomi.com>
This commit is contained in:
parent
75ddde9c56
commit
93105568c0
@ -154,6 +154,15 @@ static void ftpd_accounts(FTPD_SESSION handle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hint(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"Usage: ftpd [-46] \n\
|
||||||
|
\t-4 Use IPv4\n\
|
||||||
|
\t-6 Use IPv6\n\
|
||||||
|
");
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: ftpd_daemon
|
* Name: ftpd_daemon
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -161,28 +170,51 @@ static void ftpd_accounts(FTPD_SESSION handle)
|
|||||||
int ftpd_daemon(int s_argc, char **s_argv)
|
int ftpd_daemon(int s_argc, char **s_argv)
|
||||||
{
|
{
|
||||||
FTPD_SESSION handle;
|
FTPD_SESSION handle;
|
||||||
int ret;
|
int ret = EXIT_FAILURE;
|
||||||
|
int option;
|
||||||
|
int family = AF_UNSPEC;
|
||||||
|
|
||||||
/* The FTPD daemon has been started */
|
/* The FTPD daemon has been started */
|
||||||
|
|
||||||
g_ftpdglob.running = true;
|
g_ftpdglob.running = true;
|
||||||
printf("FTP daemon [%d] started\n", g_ftpdglob.pid);
|
printf("FTP daemon [%d] started\n", g_ftpdglob.pid);
|
||||||
|
|
||||||
|
while ((option = getopt(s_argc, &s_argv[1], "46")) != ERROR)
|
||||||
|
{
|
||||||
|
switch (option)
|
||||||
|
{
|
||||||
|
case '4':
|
||||||
|
family = AF_INET;
|
||||||
|
break;
|
||||||
|
case '6':
|
||||||
|
family = AF_INET6;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (family == AF_UNSPEC)
|
||||||
|
{
|
||||||
|
hint();
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((optind + 1) < s_argc)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Too many arguments\n", s_argv[1]);
|
||||||
|
hint();
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Open FTPD */
|
/* Open FTPD */
|
||||||
|
|
||||||
#if ADDR_FAMILY == AF_INET6
|
handle = ftpd_open(CONFIG_EXAMPLES_FTPD_PORT, family);
|
||||||
handle = ftpd_open(CONFIG_EXAMPLES_FTPD_PORT, AF_INET6);
|
|
||||||
#else
|
|
||||||
handle = ftpd_open(CONFIG_EXAMPLES_FTPD_PORT, AF_INET);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!handle)
|
if (!handle)
|
||||||
{
|
{
|
||||||
printf("FTP daemon [%d] failed to open FTPD\n", g_ftpdglob.pid);
|
printf("FTP daemon [%d] failed to open FTPD\n", g_ftpdglob.pid);
|
||||||
g_ftpdglob.running = false;
|
goto out;
|
||||||
g_ftpdglob.stop = false;
|
|
||||||
g_ftpdglob.pid = -1;
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure accounts */
|
/* Configure accounts */
|
||||||
@ -213,12 +245,15 @@ int ftpd_daemon(int s_argc, char **s_argv)
|
|||||||
/* Close the FTPD server and exit. */
|
/* Close the FTPD server and exit. */
|
||||||
|
|
||||||
printf("FTP daemon [%d] stopping\n", g_ftpdglob.pid);
|
printf("FTP daemon [%d] stopping\n", g_ftpdglob.pid);
|
||||||
|
ftpd_close(handle);
|
||||||
|
ret = EXIT_SUCCESS;
|
||||||
|
|
||||||
|
out:
|
||||||
g_ftpdglob.running = false;
|
g_ftpdglob.running = false;
|
||||||
g_ftpdglob.stop = false;
|
g_ftpdglob.stop = false;
|
||||||
g_ftpdglob.pid = -1;
|
g_ftpdglob.pid = -1;
|
||||||
ftpd_close(handle);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -261,7 +296,7 @@ int main(int argc, FAR char *argv[])
|
|||||||
printf("Starting the FTP daemon\n");
|
printf("Starting the FTP daemon\n");
|
||||||
g_ftpdglob.pid = task_create("FTP daemon", CONFIG_EXAMPLES_FTPD_PRIO,
|
g_ftpdglob.pid = task_create("FTP daemon", CONFIG_EXAMPLES_FTPD_PRIO,
|
||||||
CONFIG_EXAMPLES_FTPD_STACKSIZE,
|
CONFIG_EXAMPLES_FTPD_STACKSIZE,
|
||||||
ftpd_daemon, NULL);
|
ftpd_daemon, argv);
|
||||||
if (g_ftpdglob.pid < 0)
|
if (g_ftpdglob.pid < 0)
|
||||||
{
|
{
|
||||||
printf("Failed to start the FTP daemon: %d\n", errno);
|
printf("Failed to start the FTP daemon: %d\n", errno);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user