summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/samples/socket-api/wasm-src/socket_utils.h
blob: b69135b7954c07e3357b800e48922c05f39ea232 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
 * Copyright (C) 2022 Amazon.com Inc. or its affiliates. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 */

#ifndef TCP_UTILS_H
#define TCP_UTILS_H

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>

int
sockaddr_to_string(struct sockaddr *addr, char *str, size_t len)
{
    uint16_t port;
    char ip_string[64];
    void *addr_buf;
    int ret;

    switch (addr->sa_family) {
        case AF_INET:
        {
            struct sockaddr_in *addr_in = (struct sockaddr_in *)addr;
            port = addr_in->sin_port;
            addr_buf = &addr_in->sin_addr;
            break;
        }
        case AF_INET6:
        {
            struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr;
            port = addr_in6->sin6_port;
            addr_buf = &addr_in6->sin6_addr;
            break;
        }
        default:
            return -1;
    }

    inet_ntop(addr->sa_family, addr_buf, ip_string,
              sizeof(ip_string) / sizeof(ip_string[0]));

    ret = snprintf(str, len, "%s:%d", ip_string, ntohs(port));

    return ret > 0 && (size_t)ret < len ? 0 : -1;
}

#endif /* TCP_UTILS_H */