コード例 #1
0
ファイル: cli_if.c プロジェクト: Koushien/btpd
static void
cli_read_cb(int sd, short type, void *arg)
{
    struct cli *cli = arg;
    uint32_t cmdlen;
    uint8_t *msg = NULL;

    if (read_fully(sd, &cmdlen, sizeof(cmdlen)) != 0)
        goto error;

    msg = btpd_malloc(cmdlen);
    if (read_fully(sd, msg, cmdlen) != 0)
        goto error;

    if (!(benc_validate(msg, cmdlen) == 0 && benc_islst(msg) &&
            benc_first(msg) != NULL && benc_isstr(benc_first(msg))))
        goto error;

    if (cmd_dispatch(cli, msg) != 0)
        goto error;

    free(msg);
    return;

error:
    btpd_ev_del(&cli->read);
    close(cli->sd);
    free(cli);
    if (msg != NULL)
        free(msg);
}
コード例 #2
0
ファイル: nameconn.c プロジェクト: breezechen/zevent
static void
nc_write_cb(int sd, short type, void *arg)
{
    struct nameconn *nc = arg;
    int error;
    socklen_t errsiz = sizeof(int);
    if (getsockopt(nc->sd, SOL_SOCKET, SO_ERROR, &error, &errsiz) < 0)
        btpd_err("getsockopt error (%s).\r\n", strerror(errno));
    if (error == 0) {
        btpd_ev_del(&nc->write_ev);
        nc_done(nc, 0);
    } else {
        btpd_ev_del(&nc->write_ev);
        closesocket(nc->sd);
        nc->ai_cur = nc->ai_cur->ai_next;
        nc_connect(nc);
    }
}
コード例 #3
0
ファイル: nameconn.c プロジェクト: breezechen/zevent
void
btpd_name_connect_cancel(struct nameconn *nc)
{
    if (nc->state == NC_AI)
        btpd_addrinfo_cancel(nc->ai_handle);
    else {
        btpd_ev_del(&nc->write_ev);
        closesocket(nc->sd);
    }
    nc_free(nc);
}
コード例 #4
0
ファイル: http_tr_if.c プロジェクト: Koushien/btpd
static void
httptr_free(struct httptr_req *treq)
{
    if (treq->sd != -1) {
        btpd_ev_del(&treq->ioev);
        close(treq->sd);
    }
    btpd_timer_del(&treq->timer);
    iobuf_free(&treq->buf);
    free(treq);
}
コード例 #5
0
ファイル: cli_if.c プロジェクト: Koushien/btpd
void
ipc_shutdown(void)
{
    btpd_ev_del(&m_cli_incoming);
    close(m_listen_sd);
}