Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nettest3/nettest3.c

    r9d58539 r26de91a  
    3737#include <async.h>
    3838#include <stdio.h>
     39#include <stdlib.h>
    3940#include <str.h>
    4041
     42#include <inet/dnsr.h>
    4143#include <net/in.h>
    4244#include <net/in6.h>
     
    5153static char buf[BUF_SIZE];
    5254
    53 static struct sockaddr_in addr;
     55static struct sockaddr *address;
     56static socklen_t addrlen;
    5457
    5558static uint16_t port;
     
    6063        int fd;
    6164        char *endptr;
     65        dnsr_hostinfo_t *hinfo;
     66        inet_addr_t addr;
     67        char *addr_s;
    6268
    6369        port = 7;
    6470
    65         data = (char *)"Hello World!";
     71        data = (char *) "Hello World!";
    6672        size = str_size(data);
    6773
    6874        /* Connect to local IP address by default */
    69         addr.sin_family = AF_INET;
    70         addr.sin_port = htons(port);
    71         addr.sin_addr.s_addr = htonl(0x7f000001);
     75        inet_addr(&addr, 127, 0, 0, 1);
    7276
    7377        if (argc >= 2) {
    7478                printf("parsing address '%s'\n", argv[1]);
    75                 rc = inet_pton(AF_INET, argv[1], (uint8_t *)&addr.sin_addr.s_addr);
     79                rc = inet_addr_parse(argv[1], &addr);
    7680                if (rc != EOK) {
    77                         fprintf(stderr, "Error parsing address\n");
    78                         return 1;
     81                        /* Try interpreting as a host name */
     82                        rc = dnsr_name2host(argv[1], &hinfo, ip_v4);
     83                        if (rc != EOK) {
     84                                printf("Error resolving host '%s'.\n", argv[1]);
     85                                return rc;
     86                        }
     87
     88                        addr = hinfo->addr;
    7989                }
    80                 printf("result: rc=%d, family=%d, addr=%x\n", rc,
    81                     addr.sin_family, addr.sin_addr.s_addr);
     90                rc = inet_addr_format(&addr, &addr_s);
     91                if (rc != EOK) {
     92                        assert(rc == ENOMEM);
     93                        printf("Out of memory.\n");
     94                        return rc;
     95                }
     96                printf("result: rc=%d, ver=%d, addr=%s\n", rc,
     97                    addr.version, addr_s);
     98                free(addr_s);
    8299        }
    83100
    84101        if (argc >= 3) {
    85102                printf("parsing port '%s'\n", argv[2]);
    86                 addr.sin_port = htons(strtoul(argv[2], &endptr, 10));
     103                port = htons(strtoul(argv[2], &endptr, 10));
    87104                if (*endptr != '\0') {
    88105                        fprintf(stderr, "Error parsing port\n");
     
    91108        }
    92109
     110        rc = inet_addr_sockaddr(&hinfo->addr, port, &address, &addrlen);
     111        if (rc != EOK) {
     112                printf("Out of memory.\n");
     113                return rc;
     114        }
     115
    93116        printf("socket()\n");
    94         fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
     117        fd = socket(address->sa_family, SOCK_STREAM, IPPROTO_TCP);
    95118        printf(" -> %d\n", fd);
    96119        if (fd < 0)
     
    98121
    99122        printf("connect()\n");
    100         rc = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
     123        rc = connect(fd, address, addrlen);
    101124        printf(" -> %d\n", rc);
    102125        if (rc != 0)
     
    115138        } while (rc > 0);
    116139
    117         async_usleep(1000*1000);
     140        async_usleep(1000 * 1000);
    118141
    119142        printf("closesocket()\n");
     
    121144        printf(" -> %d\n", rc);
    122145
     146        free(address);
     147
    123148        return 0;
    124149}
    125150
    126 
    127151/** @}
    128152 */
Note: See TracChangeset for help on using the changeset viewer.