Ignore:
File:
1 edited

Legend:

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

    r26de91a r0aa70f4  
    3737#include <async.h>
    3838#include <stdio.h>
    39 #include <stdlib.h>
    4039#include <str.h>
    4140
     
    5352static char buf[BUF_SIZE];
    5453
    55 static struct sockaddr *address;
    56 static socklen_t addrlen;
     54static struct sockaddr_in addr;
    5755
    5856static uint16_t port;
     
    6462        char *endptr;
    6563        dnsr_hostinfo_t *hinfo;
    66         inet_addr_t addr;
    67         char *addr_s;
    6864
    6965        port = 7;
     
    7369
    7470        /* Connect to local IP address by default */
    75         inet_addr(&addr, 127, 0, 0, 1);
     71        addr.sin_family = AF_INET;
     72        addr.sin_port = htons(port);
     73        addr.sin_addr.s_addr = htonl(0x7f000001);
    7674
    7775        if (argc >= 2) {
    7876                printf("parsing address '%s'\n", argv[1]);
    79                 rc = inet_addr_parse(argv[1], &addr);
     77                rc = inet_pton(AF_INET, argv[1], (uint8_t *)&addr.sin_addr.s_addr);
    8078                if (rc != EOK) {
    8179                        /* Try interpreting as a host name */
    82                         rc = dnsr_name2host(argv[1], &hinfo, ip_v4);
     80                        rc = dnsr_name2host(argv[1], &hinfo, AF_INET);
    8381                        if (rc != EOK) {
    8482                                printf("Error resolving host '%s'.\n", argv[1]);
    8583                                return rc;
    8684                        }
    87 
    88                         addr = hinfo->addr;
     85                       
     86                        uint16_t af = inet_addr_sockaddr_in(&hinfo->addr, &addr, NULL);
     87                        if (af != AF_INET) {
     88                                printf("Host '%s' not resolved as IPv4 address.\n", argv[1]);
     89                                return rc;
     90                        }
    8991                }
    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);
     92                printf("result: rc=%d, family=%d, addr=%x\n", rc,
     93                    addr.sin_family, addr.sin_addr.s_addr);
    9994        }
    10095
    10196        if (argc >= 3) {
    10297                printf("parsing port '%s'\n", argv[2]);
    103                 port = htons(strtoul(argv[2], &endptr, 10));
     98                addr.sin_port = htons(strtoul(argv[2], &endptr, 10));
    10499                if (*endptr != '\0') {
    105100                        fprintf(stderr, "Error parsing port\n");
     
    108103        }
    109104
    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 
    116105        printf("socket()\n");
    117         fd = socket(address->sa_family, SOCK_STREAM, IPPROTO_TCP);
     106        fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    118107        printf(" -> %d\n", fd);
    119108        if (fd < 0)
     
    121110
    122111        printf("connect()\n");
    123         rc = connect(fd, address, addrlen);
     112        rc = connect(fd, (struct sockaddr *) &addr, sizeof(addr));
    124113        printf(" -> %d\n", rc);
    125114        if (rc != 0)
     
    144133        printf(" -> %d\n", rc);
    145134
    146         free(address);
    147 
    148135        return 0;
    149136}
Note: See TracChangeset for help on using the changeset viewer.