diff options
author | tanyaionova <isaqtm@gmail.com> | 2019-11-20 23:29:05 +0300 |
---|---|---|
committer | tanyaionova <isaqtm@gmail.com> | 2019-11-20 23:29:05 +0300 |
commit | ac7fd63348553c2a0ad1b776c7039b1a8b60dbe8 (patch) | |
tree | 772b481416230eedfdfb55a03ef1c3e61ec23825 /const.c | |
parent | 48debdf040d0e0b1af8d11a339ce8332e2454d3f (diff) | |
download | ash-sbox-ac7fd63348553c2a0ad1b776c7039b1a8b60dbe8.tar.gz |
Bump
Diffstat (limited to 'const.c')
-rw-r--r-- | const.c | 52 |
1 files changed, 27 insertions, 25 deletions
@@ -15,9 +15,9 @@ #include <jemalloc/jemalloc.h> #include "libaco/aco.h" +#include "sds/sds.h" #include "list.h" #include "log.h" -#include "stats.h" #define PORT 8080 #define LISTEN_N 50 @@ -53,12 +53,9 @@ typedef struct co_ctx { int main () { - memset (&stats, 0, sizeof (stats)); - int sockfd, newsockfd; unsigned clilen; struct sockaddr_in serv_addr, cli_addr; - log_set_level (LOG_INFO); sockfd = socket(AF_INET, SOCK_STREAM, 0); @@ -93,13 +90,9 @@ int main () { for (;;) { int nfds = epoll_wait (epollfd, events, EVENTS_N, 3000); if (nfds == 0) { - report_stat (); exit (EXIT_SUCCESS); } - stats.nfds_cnt++; - stats.nfds_sum += nfds; - if (stats.nfds_max < (size_t)nfds) - stats.nfds_max = (size_t)nfds; + assert (nfds != -1); log_trace ("nfds: %d", nfds); for (int i = 0; i < nfds; ++i) { @@ -135,7 +128,6 @@ int main () { aco_resume (co); co_cleanup (co); } - stats.yield_cnt++; } } } @@ -154,43 +146,53 @@ void co_cleanup (aco_t *co) { } ssize_t write_sock (int sock); -int check_req_finished (sbo_buf_t *buf); - +int check_req_finished (sds buf); void do_aco_stuff () { co_ctx_t *ctx = aco_get_arg (); - sbo_buf_t buf; - sbo_buf_init0 (&buf); - + sds buf = sdsempty(); for (; ;) { const int size = 256; char tmpbuf[size]; ssize_t rv = read (ctx->sock, tmpbuf, size); + log_trace("> received %ld bytes, errno = %d", rv, errno); + if (rv > 0) { + buf = sdscatlen (buf, tmpbuf, (size_t)rv); + sds req = sdscatrepr(sdsempty(), tmpbuf, (size_t)rv); + log_trace("> %s", req); + sdsfree (req); + } if (rv == 0) break; - if (rv == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) { - if (check_req_finished (&buf)) + + log_trace("len(buf) = %zu, rv = %zu", sdslen(buf), (size_t)rv); + if ((rv == -1) && (errno == EAGAIN || errno == EWOULDBLOCK)) { + log_trace("gonna check"); + if (check_req_finished (buf)) { + log_trace("req finished"); break; - else + } + else { + log_trace("yield"); aco_yield (); + } } - sbo_buf_grow (&buf, tmpbuf, (size_t)rv); - log_trace("> received %ld bytes", rv); } - sbo_buf_free (&buf); + log_trace("gonna write & close"); + + sdsfree (buf); write_sock (ctx->sock); aco_exit (); } -inline int check_req_finished (sbo_buf_t *buf) { +inline int check_req_finished (sds buf) { /* Check if we finished transmission (e.g. request ends with "\r\n\r\n") */ - size_t len = sbo_buf_size (buf); + size_t len = sdslen (buf); if (len < 4ULL) return 0; - char *base = sbo_buf_mem (buf); - return strncmp (base + (len - 4), "\r\n\r\n", 4) == 0; + return strncmp (buf + (len - 4), "\r\n\r\n", 4) == 0; } inline ssize_t write_sock (int sock) { |