Skip to content

Commit 1d8229c

Browse files
committed
refactor receive_from
1 parent 8d554a3 commit 1d8229c

1 file changed

Lines changed: 19 additions & 35 deletions

File tree

ljsocket.lua

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,17 +1167,6 @@ do -- addrinfo
11671167

11681168
return addrinfos[1]
11691169
end
1170-
1171-
function M.addrinfo_for_receive(ai_addr, len, family)
1172-
-- Create a minimal addrinfo structure with the received address
1173-
local ai = addrinfo_out()
1174-
ai.ai_addr = ai_addr
1175-
ai.ai_addrlen = len
1176-
ai.ai_family = AF.strict_lookup(family)
1177-
1178-
-- Use the existing addressinfo constructor which properly sets up the metatable
1179-
return M.addressinfo(ai, nil, nil)
1180-
end
11811170
end
11821171

11831172
do
@@ -1415,40 +1404,40 @@ do
14151404

14161405
local sockaddr_in_boxed = ffi.typeof("$[1]", sockaddr_in)
14171406

1418-
function meta:receive_from(address, size, flags)
1419-
local src_addr
1420-
local src_addr_size
1421-
1422-
if not address then
1423-
src_addr = sockaddr_in_boxed()
1424-
src_addr_size = ffi.sizeof(sockaddr_in)
1425-
else
1426-
src_addr = address.addrinfo.ai_addr
1427-
src_addr_size = address.addrinfo.ai_addrlen
1428-
end
1429-
1430-
return self:receive(size, flags, src_addr, src_addr_size)
1407+
function meta:receive_from(size, flags)
1408+
return self:receive(size, flags, true)
14311409
end
14321410

1433-
function meta:receive(size, flags, src_address, address_len)
1411+
function meta:receive(size, flags, return_address)
14341412
size = size or 64000
14351413
local buff = ffi.new("char[?]", size)
14361414

14371415
if self.on_receive then return self:on_receive(buff, size, flags) end
14381416

14391417
local len, err, num
1440-
local len_res
14411418

1442-
if src_address then
1443-
len_res = ffi.new("int[1]", address_len)
1419+
local addrinfo
1420+
1421+
if return_address then
1422+
local src_address = sockaddr_in_boxed()
1423+
local ai_addrlen_res = ffi.new("int[1]", ffi.sizeof(sockaddr_in))
1424+
14441425
len, err, num = socket.recvfrom(
14451426
self.fd,
14461427
buff,
14471428
ffi.sizeof(buff),
14481429
flags or 0,
14491430
ffi.cast(sockaddr_ptr, src_address),
1450-
len_res
1431+
ai_addrlen_res
14511432
)
1433+
1434+
if len and len > 0 then
1435+
addrinfo = M.addressinfo(addrinfo_out({
1436+
ai_addr = ffi.cast(sockaddr_ptr, src_address),
1437+
ai_addrlen = ai_addrlen_res[0],
1438+
ai_family = AF.strict_lookup(self.family),
1439+
}))
1440+
end
14521441
else
14531442
len, err, num = socket.recv(self.fd, buff, ffi.sizeof(buff), flags or 0)
14541443
end
@@ -1480,12 +1469,7 @@ do
14801469
if len > 0 then
14811470
if self.debug then print(tostring(self), ": received ", len, " bytes") end
14821471

1483-
if src_address then
1484-
return ffi.string(buff, len),
1485-
M.addrinfo_for_receive(ffi.cast(sockaddr_ptr, src_address), len_res[0], self.family)
1486-
end
1487-
1488-
return ffi.string(buff, len)
1472+
return ffi.string(buff, len), addrinfo
14891473
end
14901474

14911475
return nil, err, num

0 commit comments

Comments
 (0)