Why does the luasocket sample code not work with Love2d 11.3?

Discuss any ports of LÖVE to different platforms.
Post Reply
another-tech-guy24
Prole
Posts: 1
Joined: Wed Apr 28, 2021 4:59 pm

Why does the luasocket sample code not work with Love2d 11.3?

Post by another-tech-guy24 »

I am trying to run the following code using love2d 11.3 on Mac OS Catalina 10.15:

https://github.com/diegonehab/luasocket ... listen.lua

code:
local socket = require"socket"
local group = "225.0.0.37"
local port = 12345
local c = assert(socket.udp())
print(assert(c:setoption("reuseport", true)))
print(assert(c:setsockname("*", port)))
print(assert(c:setoption("ip-add-membership", {multiaddr = group, interface = "*"})))
while 1 do
print(c:receivefrom())
end
But I get this error when I run it using love2d:
╰$ /Applications/love.app/Contents/MacOS/love .
Error: main.lua:5: setsockopt failed
stack traceback:
[string "boot.lua"]:777: in function <[string "boot.lua"]:773>
[C]: in function 'assert'
main.lua:5: in main chunk
[C]: in function 'require'
[string "boot.lua"]:570: in function <[string "boot.lua"]:380>
[C]: in function 'xpcall'
[string "boot.lua"]:787: in function <[string "boot.lua"]:780>
[C]: in function 'xpcall'
If I run it using lua, then it works fine. I have luasocket 3.0rc1-2 installed locally.

Is love2d 11.3 using a different variation of luasockets? I thought it was 3.0rc1.
User avatar
tomxp411
Prole
Posts: 11
Joined: Thu Apr 08, 2021 5:41 pm

Re: Why does the luasocket sample code not work with Love2d 11.3?

Post by tomxp411 »

I just tried this code using both the basic Lua 5.1.5 install and Love 2d. Both fail.

I get unsupported option `reuseport'

So I dug into the C source code for Luasocket...the parameter in question is defined as a p_opt pointer, which points to a t_opt structure in the opt_meth_setoption() function. (options.c line 31)

Those structures are filled out in udp.c, lines 73 and 95.

The error implies that the "reuseport" function is not present in the options parameter list, yet looking at the optset[] and optget[] definitions, it's definitely there, in both the Love2d and Lovesocket code.

However, if you compare the opt_meth_setoption function in Luasocket with the one in Love2d, there are some trivial differences... but it's enough to make it clear that the version in the Love2d library is not the same as the most current code in the Luasocket library.

** update: there was a fix to udp.c on Jun 11, 2015, that adds the socket options to getoption()...
** update 2: I just built LOVE from source... still fails in the same way.

I'm out of time right now, so I can't keep troubleshooting this. Later, I'll try overlaying the latest Luascoket code on the Love source and see if it compiles.


(still looking at the source... may edit here with updates...)
User avatar
slime
Solid Snayke
Posts: 2932
Joined: Mon Aug 23, 2010 6:45 am
Location: Nova Scotia, Canada
Contact:

Re: Why does the luasocket sample code not work with Love2d 11.3?

Post by slime »

tomxp411 wrote: Wed Apr 28, 2021 7:47 pmthe version in the Love2d library is not the same as the most current code in the Luasocket library.
That is correct - love 11 has luasocket's source code from July 2016. There hasn't been any new release of luasocket since rc1, but there have been a bunch of commits to its soure code repository.
Post Reply

Who is online

Users browsing this forum: No registered users and 3 guests