コード例 #1
0
ファイル: async.c プロジェクト: johnnywalker/hhvm-third-party
int afdt_create_client(
    const char* fname,
    struct event_base* eb,
    const uint8_t* request,
    uint32_t request_length,
    afdt_response_handler_t response_handler,
    afdt_error_handler_t error_handler,
    const struct timeval* timeout,
    void* userdata) {
    int ret;

    struct afdt_error_t err = AFDT_ERROR_T_INIT;
    err.phase = AFDT_CREATE_CLIENT;

    struct ev_arg* ev_userdata = malloc(sizeof(*ev_userdata));
    if (ev_userdata == NULL) {
        set_error(&err, AFDT_MALLOC, "");
        error_handler(&err, userdata);
        return -1;
    }
    ev_userdata->eb = eb;
    ev_userdata->request_handler = NULL;
    ev_userdata->response_handler = response_handler;
    ev_userdata->post_handler = NULL;
    ev_userdata->error_handler = error_handler;
    ev_userdata->afdt_userdata = userdata;

    ret = afdt_connect(fname, &err);
    if (ret < 0) {
        goto socket_failed;
    }
    int connfd = ret;

    ret = afdt_send_plain_msg(connfd, request, request_length, &err);

    if (ret < 0) {
        goto write_failed;
    }

    enum afdt_operation err_op = AFDT_NO_OPERATION;
    event_set(&ev_userdata->ev, connfd, EV_READ, client_handle_read, ev_userdata);
    ret = event_bsa(eb, &ev_userdata->ev, timeout, &err_op);
    if (ret < 0) {
        set_error(&err, err_op, "");
        goto event_failed;
    }

    return 0;

    int errno_save;
write_failed:
event_failed:
    errno_save = errno;
    close(connfd);
    errno = errno_save;
socket_failed:
    error_handler(&err, userdata);
    free(ev_userdata);
    return ret;
}
コード例 #2
0
ファイル: light-process.cpp プロジェクト: craigcarnell/hhvm
static void send_raw(int afdt_fd, const void* data, uint32_t len) {
  afdt_error_t err = AFDT_ERROR_T_INIT;
  while (len > 0) {
    auto l = std::min<uint32_t>(len, AFDT_MSGLEN);
    if (afdt_send_plain_msg(afdt_fd, (uint8_t*)data, l, &err) < 0) {
      throw Exception("Failed in afdt_send: %s",
                      err.message && err.message[0] ? err.message :
                      folly::errnoStr(errno).c_str());
    }
    len -= l;
    data = (char*)data + l;
  }
}