루아 소켓을 사용하여 TCP IP를 통해 서버에 연결하는 독립형 lua 스크립트가 있습니다. 이 서버는 수신 호출을 사용하여 해당 서버의 데이터를 수신합니다. 그러나 Ctrl + C로 중지하려고하면 두 시나리오 중 하나가 발생합니다.루아 소켓은 Ctrl + C로 올바르게 멈출 수 없습니다.
- 현재 트래픽이없고 수신 대기 중이면 Ctrl + C는 적용되지 않습니다. 이 프로그램은 계속 실행되며 kill에 의해 종료되어야합니다.
트래픽이 - 만약, 프로그램은 아래의 출력과 오픈 여전히 소켓 서버가 다른 연결 수락하지으로 종료됩니다 : 나는 두 번째 시나리오를 해결하기 위해 PCALL을 사용하여 시도
lua: luaSocketTest.lua:15: interrupted!
stack traceback:
[C]: in function 'receive'
luaSocketTest.lua:15: in function 'doWork'
luaSocketTest.lua:22: in main chunk
[C]: ?
을, 성공없이. pcall이 리턴하지 않으면, 프로세스는 여전히 오류를 발생시킵니다. 내 프로그램의
샘플은 다음과 같습니다 :
local socket = require ("socket")
local ip = "localhost"
local port = 5003
function doWork()
print ("Starting socket: "..ip..":"..port)
client = assert(socket.connect(ip, port))
print ("Socket Accepted")
client:send("TEST TEST")
while 1 do
local byte, err = client:receive (1)
if not err then
print (byte)
end
end
end
while 1 do
local status = pcall(doWork())
print ("EXITED PCALL WITH STATUS: "..tostring(status))
if not status then client:close() end
end
어떤 운영 체제를 사용하고 있습니까? –
나는 이것이 클라이언트 타임 아웃을 0으로 설정하고 주기적으로 소켓에 도착한 새 데이터를 다시 체크함으로써 피할 수 있다고 생각한다. 잠을자는 동안 ctrl-c를 사용할 수 있어야합니다. – jpjacobs
Lorenzo, Linux 사용 – elanamig