Ich schreibe einen Server mit Lua-Programmiersprache, und die Netzwerkebene basiert auf LuaSocket.Wie zu prüfen, ob ein Socket in der luasocket-Bibliothek geschlossen ist oder nicht?
Und ich kann keine Methode finden zu erkennen, dass ein Socket geschlossen ist oder nicht in seinem Referenzhandbuch außer durch nur versuchen, Daten von ihm zu lesen (es wird NULL zurückgeben und Zeichenfolge 'schließen', wenn sie aufrufen).
Mein Code sieht wie folgt aus:
local socket = require 'socket'
local server = socket.tcp()
local port = 9527
server:bind('*', port)
local status, errorMessage = server:listen()
if status == 1 then
printf('Server is launched successfully on port %u', port)
else
printf('Server listen failed, error message is %s', errorMessage)
return
end
local sockets = {server}
while true do
local results = socket.select(sockets)
for _, sock in ipairs(results) do
if sock == server then
local s = server:accept()
callback('Connected', s)
table.insert(sockets, s)
printf('%s connected', s:getsockname())
else
-- trying to detect socket is closed
if sock:isClosed() then
callback('Disconnected', sock)
for i, s in ipairs(sockets) do
if s == sock then
table.remove(sockets, i)
break
end
end
printf('%s disconnected', sock:getsockname())
else
callback('ReadyRead', sock)
end
end
end
end
Rufen Sie 'server: settimeout' in der 'while true'-Schleife auf. – hjpotter92