lua ソケットを使用して TCP IP 経由でサーバーに接続するスタンドアロンの lua スクリプトがあります。受信呼び出しを使用して、そのサーバーからデータを受信します。動作しますが、Ctrl+C で停止しようとすると、次の 2 つのシナリオのいずれかが発生します。
- 現在トラフィックがなく、受信が待機中の場合、Ctrl+C は無効になります。プログラムは引き続き実行されるため、kill によって終了する必要があります。
-トラフィックがある場合、プログラムは次の出力で終了し、ソケットは開いたままで、サーバーは別の接続を受け入れません。
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 を使用して 2 番目のシナリオを解決しようとしましたが、成功しませんでした。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