aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2007-09-04 17:38:02 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2007-09-04 17:38:02 -0500
commiteed7b36b59d97bc74a0065e937d33a1a041a2ff2 (patch)
treed5ee632c649d9f48e9630468dbbade616a091743
parente3b458a3797af23a5ce2fd7ceb55515dfd553d08 (diff)
downloadluairc-eed7b36b59d97bc74a0065e937d33a1a041a2ff2.tar.gz
luairc-eed7b36b59d97bc74a0065e937d33a1a041a2ff2.zip
handle timeout errors in DCC SEND packets
-rw-r--r--src/irc/dcc.lua21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/irc/dcc.lua b/src/irc/dcc.lua
index 8e71de7..b4db9d1 100644
--- a/src/irc/dcc.lua
+++ b/src/irc/dcc.lua
@@ -39,12 +39,25 @@ local function send_file(sock, file, packet_size)
bytes = bytes + packet:len()
local index = 1
while true do
+ local skip = false
sock:send(packet, index)
- local new_bytes = misc._int_to_str(sock:receive(4))
- if new_bytes ~= bytes then
- index = packet_size - bytes + new_bytes + 1
+ local new_bytes, err = sock:receive(4)
+ if not new_bytes then
+ if err == "timeout" then
+ skip = true
+ else
+ irc_debug._warn(err)
+ break
+ end
else
- break
+ new_bytes = misc._int_to_str(new_bytes)
+ end
+ if not skip then
+ if new_bytes ~= bytes then
+ index = packet_size - bytes + new_bytes + 1
+ else
+ break
+ end
end
end
coroutine.yield(true)