diff options
author | jluehrs2 <jluehrs2@uiuc.edu> | 2007-09-04 17:38:02 -0500 |
---|---|---|
committer | jluehrs2 <jluehrs2@uiuc.edu> | 2007-09-04 17:38:02 -0500 |
commit | eed7b36b59d97bc74a0065e937d33a1a041a2ff2 (patch) | |
tree | d5ee632c649d9f48e9630468dbbade616a091743 /src/irc/dcc.lua | |
parent | e3b458a3797af23a5ce2fd7ceb55515dfd553d08 (diff) | |
download | luairc-eed7b36b59d97bc74a0065e937d33a1a041a2ff2.tar.gz luairc-eed7b36b59d97bc74a0065e937d33a1a041a2ff2.zip |
handle timeout errors in DCC SEND packets
Diffstat (limited to 'src/irc/dcc.lua')
-rw-r--r-- | src/irc/dcc.lua | 21 |
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) |