diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index 628705ca51ec9e99f16628b93489cc9e86e235ca..ab3ae58eb8e648f9787934644653b9a5dc98ba27 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -127,7 +127,7 @@ socket_methods.syswrite = function(self, octets)
         self._errno = box.errno()
         return nil
     end
-    return done
+    return tonumber(done)
 end
 
 socket_methods.sysread = function(self, len)
@@ -413,7 +413,7 @@ socket_methods.getsockopt = function(self, level, name)
         if len[0] ~= 4 then
             error(sprintf("Internal error: unexpected optlen: %d", len[0]))
         end
-        return value[0]
+        return tonumber(value[0])
     end
 
     if info.type == 2 then
@@ -424,7 +424,7 @@ socket_methods.getsockopt = function(self, level, name)
             self._errno = box.errno()
             return nil
         end
-        return ffi.string(value, len[0])
+        return ffi.string(value, tonumber(len[0]))
     end
 
     if name == 'SO_LINGER' then
@@ -489,6 +489,8 @@ socket_methods.accept = function(self)
         return nil
     end
 
+    fh = tonumber(fh)
+
     -- Make socket to be non-blocked by default
     -- ignore result
     ffi.C.bsdsocket_nonblock(fh, 1)
@@ -778,6 +780,8 @@ local function create_socket(domain, stype, proto)
         return nil
     end
 
+    fh = tonumber(fh)
+
     -- Make socket to be non-blocked by default
     if ffi.C.bsdsocket_nonblock(fh, 1) < 0 then
         local errno = box.errno()