Also wenn ich das richtig sehe, dann kann man aus dem Handle von CreateNetworkServer() die Socket-Nummer extrahieren und direkt nutzen. Voraussetzung ist, dass man #PB_Any nutzt.
Ich habe dir mal etwas vorbereitet. Im Grunde musst du nur das große CompilerIf oben in deinen schon vorhandenen Code stecken und den Rest kannst du so lassen wie er bisher war.
Code:
EnableExplicit
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#SOL_SOCKET = 1
#SO_REUSEADDR = 2
#SO_REUSEPORT = 15
Procedure CreateNetworkServerEx(ServerID.i, Port.i, Modus, BindedIP$)
Protected handle.i
If ServerID.i = #PB_Any
handle.i = CreateNetworkServer(#PB_Any, Port, Modus, BindedIP$)
If Not handle
ProcedureReturn handle
EndIf
Protected hSocket.l = PeekL(handle), enable.l = 1
If setsockopt_(hSocket, #SOL_SOCKET, #SO_REUSEADDR, @enable, SizeOf(enable)) < 0
Debug "Error setting SO_REUSEADDR"
End
EndIf
If setsockopt_(hSocket, #SOL_SOCKET, #SO_REUSEPORT, @enable, SizeOf(enable)) < 0
Debug "Error setting SO_REUSEPORT"
End
EndIf
ProcedureReturn handle
Else
ProcedureReturn CreateNetworkServer(ServerID, Port, Modus, BindedIP$)
EndIf
EndProcedure
Macro CreateNetworkServer(a, b, c = #PB_Network_TCP | #PB_Network_IPv4, d = "0.0.0.0")
CreateNetworkServerEx(a, b, c, d)
EndMacro
CompilerEndIf
InitNetwork()
Define a.i = CreateNetworkServer(#PB_Any, 8080, #PB_Network_TCP, "0.0.0.0")