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 }