print_addr.c
最終更新:2009/10/10
001: /* print_addr.c
002: * ホストネームのアドレスの表示
003: */
004:
005: #include "apr_general.h"
006: #include "apr_network_io.h"
007:
008: #include "mystab.h"
009:
010: #define K_BUF_SIZE 1024
011:
012: int apr_my_main (
013: int ac,
014: char **av,
015: apr_file_t * astdin,
016: apr_file_t * astdout,
017: apr_file_t * astderr,
018: apr_pool_t * pool
019: ) {
020: apr_status_t rv;
021: apr_sockaddr_t *sa;
022:
023: char error_buf[256];
024: char *buf;
025: char *hostname;
026:
027: if (ac < 2) {
028: printf("Usage: %s hostname\n", av[0]);
029: return 1; /* エラー終了 */
030: }
031: hostname = av[1];
032:
033: /* hostname の sockaddr のリストを取得。
034: * アドレスファミリは APR_UNSPEC にしておいて、IPv4 or IPv6 or IPv4+IPv6をプラットフォーム依存に。
035: */
036: if (APR_SUCCESS != (rv = apr_sockaddr_info_get(&sa, hostname, APR_UNSPEC, 0, 0, pool))) {
037: apr_file_printf(astderr,
038: "ERROR: apr_sockaddr_info_get: %s\n", apr_strerror(rv, error_buf, sizeof(error_buf)));
039: return 1; /* エラー終了 */
040: }
041:
042: buf = apr_palloc(pool, K_BUF_SIZE);
043:
044: /* 取得した sockaddr のリストからそれぞれのIPアドレスを取得して表示 */
045: for (; sa!=NULL; sa=sa->next) {
046:
047: if (APR_SUCCESS != (rv = apr_sockaddr_ip_get (&buf, sa))) {
048: apr_file_printf(astderr,
049: "ERROR: apr_sockaddr_ip_getbuf: %s\n", apr_strerror(rv, error_buf, sizeof(error_buf)));
050: return 1; /* エラー終了 */
051: }
052:
053: apr_file_printf(astdout, "[%s]\n", buf);
054: }
055:
056: /* 正常終了 */
057:
058: return 0;
059:
060: }
![]() | KAKU PROJECT (2009) |