コード例 #1
0
ファイル: gnrc_conn_udp.c プロジェクト: daniel-k/RIOT
int conn_udp_create(conn_udp_t *conn, const void *addr, size_t addr_len,
                    int family, uint16_t port)
{
    conn->l4_type = GNRC_NETTYPE_UDP;
    switch (family) {
#ifdef MODULE_GNRC_IPV6
        case AF_INET6:
            if (addr_len != sizeof(ipv6_addr_t)) {
                return -EINVAL;
            }
            if (gnrc_conn6_set_local_addr(conn->local_addr, addr)) {
                conn->l3_type = GNRC_NETTYPE_IPV6;
                conn->local_addr_len = addr_len;
                conn_udp_close(conn);       /* unregister possibly registered netreg entry */
                gnrc_conn_reg(&conn->netreg_entry, conn->l4_type, (uint32_t)port);
            }
            else {
                return -EADDRNOTAVAIL;
            }
            break;
#endif
        default:
            (void)addr;
            (void)addr_len;
            (void)port;
            return -EAFNOSUPPORT;
    }
    return 0;
}
コード例 #2
0
ファイル: posix_sockets.c プロジェクト: JMR-b/RIOT
static int socket_close(int socket)
{
    socket_t *s;
    int res = 0;
    if ((unsigned)(socket - 1) > (SOCKET_POOL_SIZE - 1)) {
        return -1;
    }
    mutex_lock(&_pool_mutex);
    s = &_pool[socket];
    if (s->bound) {
        switch (s->domain) {
            case AF_INET:
            case AF_INET6:
                switch (s->type) {
#ifdef MODULE_CONN_UDP
                    case SOCK_DGRAM:
                        conn_udp_close(&s->conn.udp);
                        break;
#endif
#ifdef MODULE_CONN_IP
                    case SOCK_RAW:
                        conn_ip_close(&s->conn.raw);
                        break;
#endif
#ifdef MODULE_CONN_TCP
                    case SOCK_STREAM:
                        conn_tcp_close(&s->conn.tcp);
                        break;
#endif
                    default:
                        errno = EOPNOTSUPP;
                        res = -1;
                        break;
                }
                break;
            default:
                res = -1;
                break;
        }
    }
    s->domain = AF_UNSPEC;
    s->src_port = 0;
    mutex_unlock(&_pool_mutex);
    return res;
}