diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index fffbe93a95a5a9e323aa3e3e892494734ba19ac8..793ae416bcb526e79345d27bdcca637f7ca7497f 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -713,6 +713,7 @@ socket_methods.write = function(self, octets, timeout)
             if not errno_is_transient[self:errno()] then
                 return false
             end
+            written = 0
         end
 
         if written == string.len(octets) then
diff --git a/src/lua/net_box.lua b/src/lua/net_box.lua
index f824a5c74ee04fe0d819ca7eca67db7a13bca4ed..d275ced5ffed2deb1deae81f3c68656fa806ed96 100644
--- a/src/lua/net_box.lua
+++ b/src/lua/net_box.lua
@@ -1004,7 +1004,7 @@ local remote_methods = {
                 -- packet on the receiving end, and close the connection.
                 -- Every second sockets we iterate the while loop
                 -- and check the connection state
-                    self.s:writable(1)
+                    while self.s:writable(1) == 0 do end
                 else
                     table.insert(self.wbuf, s)
                     self:_fatal(errno.strerror(errno()))