예제 #1
0
/* simply a wrapper around bind() */
int mybind(mysocket_t sd, struct sockaddr *addr, int addrlen)
{
    mysock_context_t *ctx = _mysock_get_context(sd);
    assert(addr);

    MYSOCK_CHECK(ctx != NULL, EBADF);
    MYSOCK_CHECK(addr->sa_family == AF_INET, EADDRNOTAVAIL);

    /* mybind() must precede mylisten() */
    assert(!ctx->listening);
    ctx->bound = TRUE;
    ctx->network_state.local_addr = *addr;
    return _network_bind(&ctx->network_state, addr, addrlen);
}
예제 #2
0
파일: mysock.c 프로젝트: XilunWu/cs536
/* obtain ephemeral port for the given mysocket */
int _mysock_bind_ephemeral(mysock_context_t *ctx)
{
    struct sockaddr_in sin;
    int rc;

    assert(ctx && !ctx->bound);

    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = 0;
    sin.sin_addr.s_addr = htonl(INADDR_ANY);

    if ((rc = _network_bind(&ctx->network_state,
                            (struct sockaddr *) &sin, sizeof(sin))) < 0)
    {
        perror("network_bind");
        assert(0);
        return rc;
    }

    ctx->bound = TRUE;
    return 0;
}