diff --git a/src/lua/lua_socket.cc b/src/lua/lua_socket.cc
index 710642eb001e7793d3f8e7212053ae3043e74d06..5cb95033baf25201d8b211c1f80b4eddd350cb1a 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 ccf0233e5984c3664afd0386867ecebc5a36bb70..9fe4147b6e3556f95ee3f08b90006e5cb1078fb7 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 beb7c2df679c751ad62de8acbd4c8094005aa788..d544fc117eb6a79bad163b1a7b5035be1a4e60d8 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