0
我有兩臺服務器之間的代理客戶端。主服務器S1在互聯網上。代理客戶端和第二個服務器S2位於同一個Intranet中。我有以下代碼(部分留出來爲簡單起見),這是負責轉發數據從S2未來「是」以S1:套接字發送拋出超時錯誤
fsctimeout = 0.01
function send_data(sock, data, i, l)
local p,err,q = sock:send(data, i, l)
if(err == "timeout" and q ~= l) then
fsctimeout = fsctimeout * 2
sock:settimeout(fsctimeout)
send_data(sock, data, q + 1, l)
fsctimeout = fsctimeout/2
sock:settimeout(fsctimeout)
end
end
while not e do
rect, _, st = socket.select({csc, fsc}, nil, .01) --csc is S1, fsc is S2 sockets.
if(rect[fsc] ~= nil and csc ~= nil) then
local data, err, part = fsc:receive(8192)
if(data ~= nil) then
send_data(csc, data, 1, data:len())
totalBytesFromFP = totalBytesFromFP + data:len()
end
if(part ~= nil) then
send_data(csc, part, 1, part:len())
totalBytesFromFP = totalBytesFromFP + part:len()
end
end
end
我寫的send_data
功能,因此,如果發送超時,這將增加一倍套接字超時並重試。但是現在有時候這些程序會被卡在send_data
函數中而沒有成功發送數據。我能在這裏做什麼? (我正在測試試圖發送一個1MB文件,對於少量數據,這個問題似乎並沒有發生。)