コード例 #1
0
ファイル: subrequest.c プロジェクト: keemun/subrequest
int
subreq_run(int id)
{
    unsigned short request_id = id;
    int sock = INVALID_SOCKET;
    int connect_ret = connect_to_fpm(host, port, &sock);
    if (connect_ret) {
        return 1;
    }
    ssize_t begin_ret = begin_send(&sock, request_id);
    if (!begin_ret) {
        close(sock);
        return 2;
    }
    ssize_t send_env_ret = send_env(&sock, *(keys_dict+id), *(vals_dict+id), len_dict[id], request_id);
    if (!send_env_ret) {
        close(sock);
        return 3;
    }
    ssize_t send_content_ret = send_content(&sock, *(content_dict+id), request_id);
    if (!send_content_ret) {
        return 4;
    }

	struct myevent_s *ev;
	struct epoll_event epv = {0, {0}};
	epv.events = EPOLLIN;
	ev = emalloc(sizeof(struct epoll_event));
	ev->fd = sock;
	ev->request_id = request_id;
	epv.data.ptr = ev;
	epoll_ctl(g_epoll_fd, EPOLL_CTL_ADD, sock, &epv);

	return 0;
}
コード例 #2
0
ファイル: socket.cpp プロジェクト: HappySky2046/gce
///----------------------------------------------------------------------------
void socket::send(
  byte_t const* header, std::size_t header_size,
  byte_t const* body, std::size_t body_size
  )
{
  if (!waiting_end_)
  {
    gce::detail::bytes_t& send_buf = send_buffer_[standby_buffer_];
    send_buf.append(header, header_size);
    send_buf.append(body, body_size);

    if (!sending_)
    {
      begin_send();
    }
  }
}
コード例 #3
0
ファイル: socket.cpp プロジェクト: HappySky2046/gce
///----------------------------------------------------------------------------
void socket::end_send(errcode_t const& errc)
{
  sending_ = false;
  send_buffer_[sending_buffer_].clear();

  if (!errc && !send_buffer_[standby_buffer_].empty())
  {
    begin_send();
  }
  else if (closed_)
  {
    close();
  }

  if (closed_ && !sending_)
  {
    errcode_t ignore_ec;
    sync_.cancel(ignore_ec);
  }

  reconn_ = false;
}