summaryrefslogtreecommitdiffstats
path: root/const.c
diff options
context:
space:
mode:
authortanyaionova <isaqtm@gmail.com>2019-11-20 23:29:05 +0300
committertanyaionova <isaqtm@gmail.com>2019-11-20 23:29:05 +0300
commitac7fd63348553c2a0ad1b776c7039b1a8b60dbe8 (patch)
tree772b481416230eedfdfb55a03ef1c3e61ec23825 /const.c
parent48debdf040d0e0b1af8d11a339ce8332e2454d3f (diff)
downloadash-sbox-ac7fd63348553c2a0ad1b776c7039b1a8b60dbe8.tar.gz
Bump
Diffstat (limited to 'const.c')
-rw-r--r--const.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/const.c b/const.c
index b0ec1e6..592ba6d 100644
--- a/const.c
+++ b/const.c
@@ -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) {