diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua index 793ae416bcb526e79345d27bdcca637f7ca7497f..6a9caef5514b4fc6e651c1fa95826ef2ea7bb9d3 100644 --- a/src/lua/bsdsocket.lua +++ b/src/lua/bsdsocket.lua @@ -706,18 +706,19 @@ socket_methods.write = function(self, octets, timeout) timeout = TIMEOUT_INFINITY end + local total_len = #octets local started = fiber.time() while true do local written = self:syswrite(octets) if written == nil then if not errno_is_transient[self:errno()] then - return false + return nil end written = 0 end if written == string.len(octets) then - return true + return total_len end if written > 0 then octets = string.sub(octets, written + 1) @@ -735,11 +736,11 @@ socket_methods.send = function(self, octets, flags) self._errno = nil local res = ffi.C.send(fd, octets, string.len(octets), iflags) - if res == -1 then + if res < 0 then self._errno = boxerrno() - return false + return nil end - return true + return tonumber(res) end socket_methods.recv = function(self, size, flags) @@ -807,9 +808,9 @@ socket_methods.sendto = function(self, host, port, octets, flags) end if res < 0 then self._errno = boxerrno() - return false + return nil end - return true + return tonumber(res) end local function create_socket(domain, stype, proto) diff --git a/test/box/bsdsocket.result b/test/box/bsdsocket.result index bc27c950ae152b66ca1c52d8bfce8c29ee16e299..7437f619021e3cd8402dbe5192130b69649d620b 100644 --- a/test/box/bsdsocket.result +++ b/test/box/bsdsocket.result @@ -358,7 +358,7 @@ sc:writable(10) ... sc:write('Hello, world') --- -- true +- 12 ... sa, addr = s:accept() --- @@ -392,7 +392,7 @@ sc:writable() ... sc:write(', again') --- -- true +- 7 ... sa:read(8) --- @@ -420,7 +420,7 @@ sc:writable() ... sc:send('abc') --- -- true +- 3 ... sa:read(3) --- @@ -428,7 +428,7 @@ sa:read(3) ... sc:send('Hello') --- -- true +- 5 ... sa:readable() --- @@ -444,15 +444,15 @@ sa:recv() ... sc:send('Hello') --- -- true +- 5 ... sc:send(', world') --- -- true +- 7 ... sc:send("\\nnew line") --- -- true +- 10 ... sa:read('\\n', 1) --- @@ -472,7 +472,7 @@ sa:read('ine', 0.1) ... sc:send('Hello, world') --- -- true +- 12 ... sa:read(',', 1) --- @@ -567,7 +567,7 @@ sa:nonblock(true) ... sa:send('Hello, world') --- -- true +- 12 ... sc:recv() --- @@ -704,7 +704,7 @@ sc = socket('AF_INET', 'SOCK_DGRAM', 'udp') ... sc:sendto('127.0.0.1', 3548, 'Hello, world') --- -- true +- 12 ... s:readable(10) --- @@ -716,7 +716,7 @@ s:recv() ... sc:sendto('127.0.0.1', 3548, 'Hello, world, 2') --- -- true +- 15 ... s:readable(10) --- @@ -772,7 +772,7 @@ sc:sendto('127.0.0.1', s:name().port) ... sc:sendto('127.0.0.1', s:name().port, 'Hello, World!') --- -- true +- 13 ... s:readable(1) --- @@ -787,7 +787,7 @@ data ... s:sendto(from.host, from.port, 'Hello, hello!') --- -- true +- 13 ... sc:readable(1) --- @@ -830,7 +830,7 @@ string.match(tostring(s), ', peer') ~= nil ... s:write("HEAD / HTTP/1.0\r\nHost: tarantool.org\r\n\r\n") --- -- true +- 40 ... header = s:read({chunk = 4000, delimiter = {"\n\n", "\r\n\r\n" }}, 1) --- @@ -1322,7 +1322,7 @@ cnt ... client:write('hi') --- -- true +- 2 ... client:read(123) ---