From 79dc41ab058ff6497d7db0cc19951bade41c1bdd Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko <pmwkaa@gmail.com> Date: Fri, 11 Oct 2013 17:23:44 +0400 Subject: [PATCH] gh-43: incorrect socket:shutdown() arg handling. fixes #43 --- src/lua/lua_socket.cc | 2 +- test/box/socket.result | 6 ++++++ test/box/socket.test | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/lua/lua_socket.cc b/src/lua/lua_socket.cc index 710642eb00..5cb95033ba 100644 --- a/src/lua/lua_socket.cc +++ b/src/lua/lua_socket.cc @@ -271,7 +271,7 @@ lbox_socket_close(struct lua_State *L) static int lbox_socket_shutdown(struct lua_State *L) { - struct bio_socket *s = bio_checkactivesocket(L, -1); + struct bio_socket *s = bio_checkactivesocket(L, 1); int how = luaL_checkint(L, 2); bio_clearerr(s); if (shutdown(s->io_w.fd, how)) diff --git a/test/box/socket.result b/test/box/socket.result index ccf0233e59..9fe4147b6e 100644 --- a/test/box/socket.result +++ b/test/box/socket.result @@ -933,3 +933,9 @@ lua reps --- - 3 ... +lua function server() ms = box.socket.tcp() ms:bind('127.0.0.1', 8181) ms:listen() while true do local s = ms:accept( .5 ) if s ~= 'timeout' then print("accepted connection ", s) s:send('Hello world') s:shutdown(box.socket.SHUT_RDWR) end end end box.fiber.wrap(server) +--- +... +Hello world +Hello world +Hello world diff --git a/test/box/socket.test b/test/box/socket.test index beb7c2df67..d544fc117e 100644 --- a/test/box/socket.test +++ b/test/box/socket.test @@ -560,3 +560,45 @@ exec admin "lua iotest()" exec admin "lua iotest()" exec admin "lua iotest()" exec admin "lua reps" + +# Bug #43: incorrect box:shutdown() arg handling +# https://github.com/tarantool/tarantool/issues/43 +# +test=""" +function server() + ms = box.socket.tcp() + ms:bind('127.0.0.1', 8181) + ms:listen() + + while true do + local s = ms:accept( .5 ) + if s ~= 'timeout' then + print("accepted connection ", s) + s:send('Hello world') + s:shutdown(box.socket.SHUT_RDWR) + end + end +end + +box.fiber.wrap(server) +""" + +exec admin "lua " + test.replace('\n', ' ') + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect(('127.0.0.1', 8181)) +data = s.recv(1024) +s.close() +print data + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect(('127.0.0.1', 8181)) +data = s.recv(1024) +s.close() +print data + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect(('127.0.0.1', 8181)) +data = s.recv(1024) +s.close() +print data -- GitLab