diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index 2d60b5fa14c31c47fae8a472b71b2e1c1bac68d9..c6eb61f02f915fa71fc66f2ad78bcef7f58f1389 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -966,6 +966,11 @@ local function tcp_connect(host, port, timeout)
     if dns == nil then
         return nil
     end
+
+    if #dns == 0 then
+        box.errno(box.errno.EINVAL)
+        return nil
+    end
     for i, remote in pairs(dns) do
         timeout = stop - box.time()
         if timeout <= 0 then
diff --git a/test/box/bsdsocket.result b/test/box/bsdsocket.result
index cf0e390627d7ba97602fea7de4ba474b62837352..144966a65f22feefc86b80caedd52d2ae9b5f03f 100644
--- a/test/box/bsdsocket.result
+++ b/test/box/bsdsocket.result
@@ -1183,3 +1183,7 @@ lua s:close()
 ---
  - true
 ...
+lua box.cjson.encode{ box.socket.tcp_connect('test:test@localhost:3303') == nil, box.errno.strerror() }
+---
+ - [true,"Invalid argument"]
+...
diff --git a/test/box/bsdsocket.test b/test/box/bsdsocket.test
index 0399c86939d262ee90f8f0f05f1cb20525bc7a5a..194f7e5edf76023e56dc546bc1bb997ac99ed433 100644
--- a/test/box/bsdsocket.test
+++ b/test/box/bsdsocket.test
@@ -385,3 +385,6 @@ exec admin "lua s ~= nil"
 exec admin "lua s:close()"
 if os.path.exists(path):
     print 'unix socket was not removed: test failed'
+
+
+exec admin "lua box.cjson.encode{ box.socket.tcp_connect('test:test@localhost:3303') == nil, box.errno.strerror() }"