diff --git a/src/lua/bsdsocket.cc b/src/lua/bsdsocket.cc
index d9ace8c29dfb8f2d2d562edaf327bc3106a78c1f..54e1bdc759e4ae705169595df7d7c662807d2a64 100644
--- a/src/lua/bsdsocket.cc
+++ b/src/lua/bsdsocket.cc
@@ -156,7 +156,6 @@ static const struct { char name[32]; int value, type, rw; } so_opts[] = {
 	{"SO_PASSCRED",		SO_PASSCRED,		1,	1, },
 	{"SO_PEERCRED",		SO_PEERCRED,		1,	0, },
 	{"SO_PRIORITY",		SO_PRIORITY,		1,	1, },
-	{"SO_PROTOCOL",		SO_PROTOCOL,		1,	0, },
 	{"SO_RCVBUF",		SO_RCVBUF,		1,	1, },
 	{"SO_RCVBUFFORCE",	SO_RCVBUFFORCE,		1,	1, },
 	{"SO_RCVLOWAT",		SO_RCVLOWAT,		1,	1, },
@@ -167,7 +166,18 @@ static const struct { char name[32]; int value, type, rw; } so_opts[] = {
 	{"SO_SNDBUF",		SO_SNDBUF,		1,	1, },
 	{"SO_SNDBUFFORCE",	SO_SNDBUFFORCE,		1,	1, },
 	{"SO_TIMESTAMP",	SO_TIMESTAMP,		1,	1, },
+
+#ifdef SO_PROTOCOL
+	{"SO_PROTOCOL",		SO_PROTOCOL,		1,	0, },
+#else
+	#define SO_PROTOCOL	38
+#endif
+
+#ifdef SO_TYPE
 	{"SO_TYPE",		SO_TYPE,		1,	0, },
+#else
+	#define SO_TYPE		3
+#endif
 
 	{"",			0,			0,	0, }
 };
diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index 33e416195e54a167bb1bdcee2fa688c067ed0142..ca7c1be90de9886db6e9dc64d4a47a43d2db5fda 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -473,6 +473,10 @@ socket_methods.accept = function(self)
         self._errno = box.errno()
         return nil
     end
+    
+    -- Make socket to be non-blocked by default
+    -- ignore result
+    ffi.C.bsdsocket_nonblock(fh, 1)
 
     local socket = { fh = fh }
     setmetatable(socket, box.socket.internal.socket_mt)
@@ -758,8 +762,10 @@ local function create_socket(self, domain, stype, proto)
 
     -- Make socket to be non-blocked by default
     if ffi.C.bsdsocket_nonblock(fh, 1) < 0 then
-         ffi.C.close(fh)
-         return nil
+        local errno = box.errno()
+        ffi.C.close(fh)
+        box.errno(errno)
+        return nil
     end
 
     local socket = { fh = fh }