diff options
author | Emil Renner Berthing <esmil@mailme.dk> | 2013-01-25 17:59:02 +0100 |
---|---|---|
committer | Emil Renner Berthing <esmil@mailme.dk> | 2013-01-26 17:22:15 +0100 |
commit | 09b50bc8c8a3a03dc57374b138ff18d16e119df4 (patch) | |
tree | 01b0321ce5bb3d92f54516217beab8ce60aac023 | |
parent | 0407a69d57a80b8fd3d91f1f7ee15f22f40dd22b (diff) | |
download | lem-09b50bc8c8a3a03dc57374b138ff18d16e119df4.tar.gz lem-09b50bc8c8a3a03dc57374b138ff18d16e119df4.tar.xz lem-09b50bc8c8a3a03dc57374b138ff18d16e119df4.zip |
io: server cleanup
-rw-r--r-- | lem/io/server.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/lem/io/server.c b/lem/io/server.c index 35e0f10..c2c5f55 100644 --- a/lem/io/server.c +++ b/lem/io/server.c @@ -94,13 +94,10 @@ server_interrupt(lua_State *T) } static int -server__accept(lua_State *T, struct ev_io *w) +server__accept(lua_State *T, struct ev_io *w, int mt) { - struct sockaddr client_addr; - unsigned int client_addrlen; - int sock; + int sock = accept(w->fd, NULL, NULL); - sock = accept(w->fd, &client_addr, &client_addrlen); if (sock < 0) { if (errno == EAGAIN || errno == ECONNABORTED) return 0; @@ -122,7 +119,7 @@ server__accept(lua_State *T, struct ev_io *w) return 2; } - stream_new(T, sock, lua_upvalueindex(1)); + stream_new(T, sock, mt); return 1; } @@ -133,7 +130,7 @@ server_accept_cb(EV_P_ struct ev_io *w, int revents) (void)revents; - ret = server__accept(w->data, w); + ret = server__accept(w->data, w, 2); if (ret == 0) return; @@ -155,31 +152,29 @@ server_accept(lua_State *T) if (w->data != NULL) return io_busy(T); - ret = server__accept(T, w); + ret = server__accept(T, w, lua_upvalueindex(1)); if (ret > 0) return ret; - lua_settop(T, 1); w->cb = server_accept_cb; w->data = T; ev_io_start(LEM_ w); - return lua_yield(T, 1); + lua_settop(T, 1); + lua_pushvalue(T, lua_upvalueindex(1)); + return lua_yield(T, 2); } static void server_autospawn_cb(EV_P_ struct ev_io *w, int revents) { lua_State *T = w->data; - struct sockaddr client_addr; - unsigned int client_addrlen; int sock; lua_State *S; (void)revents; /* dequeue the incoming connection */ - client_addrlen = sizeof(struct sockaddr); - sock = accept(w->fd, &client_addr, &client_addrlen); + sock = accept(w->fd, NULL, NULL); if (sock < 0) { if (errno == EAGAIN || errno == ECONNABORTED) return; @@ -200,14 +195,12 @@ server_autospawn_cb(EV_P_ struct ev_io *w, int revents) S = lem_newthread(); - /* copy handler function to thread */ + /* copy handler function */ lua_pushvalue(T, 2); - lua_xmove(T, S, 1); - /* create stream */ - stream_new(T, sock, lua_upvalueindex(1)); - /* move stream to new thread */ - lua_xmove(T, S, 1); + stream_new(T, sock, 3); + /* move function and stream to new thread */ + lua_xmove(T, S, 2); lem_queue(S, 1); return; |