Software /
code /
prosody
Comparison
net/server_epoll.lua @ 7687:ae24deae6488
net.server_epoll: Separate ok from err branch more
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 07 Oct 2016 17:18:29 +0200 |
parent | 7658:e14a124c4d73 |
child | 7691:a5ad858f3a93 |
comparison
equal
deleted
inserted
replaced
7686:8d6f367bed8c | 7687:ae24deae6488 |
---|---|
288 end | 288 end |
289 | 289 |
290 -- Called when socket is readable | 290 -- Called when socket is readable |
291 function interface:onreadable() | 291 function interface:onreadable() |
292 local data, err, partial = self.conn:receive(self._pattern); | 292 local data, err, partial = self.conn:receive(self._pattern); |
293 if data then | |
294 self:on("incoming", data); | |
295 else | |
296 if partial then | |
297 self:on("incoming", partial, err); | |
298 end | |
299 if err == "wantread" then | |
300 self:setflags(true, nil); | |
301 elseif err == "wantwrite" then | |
302 self:setflags(nil, true); | |
303 elseif err ~= "timeout" then | |
304 self:on("disconnect", err); | |
305 self:destroy() | |
306 return; | |
307 end | |
308 end | |
293 if self.conn:dirty() then | 309 if self.conn:dirty() then |
294 self:setreadtimeout(false); | 310 self:setreadtimeout(false); |
295 self:pausefor(cfg.read_retry_delay); | 311 self:pausefor(cfg.read_retry_delay); |
296 else | 312 else |
297 self:setreadtimeout(); | 313 self:setreadtimeout(); |
298 end | |
299 if data or partial then | |
300 self:on("incoming", data or partial, err); | |
301 end | |
302 if err == "wantread" then | |
303 self:setflags(true, nil); | |
304 elseif err == "wantwrite" then | |
305 self:setflags(nil, true); | |
306 elseif not data and err ~= "timeout" then | |
307 self:on("disconnect", err); | |
308 self:destroy() | |
309 return; | |
310 end | 314 end |
311 end | 315 end |
312 | 316 |
313 -- Called when socket is writable | 317 -- Called when socket is writable |
314 function interface:onwriteable() | 318 function interface:onwriteable() |
321 end | 325 end |
322 self:setflags(nil, false); | 326 self:setflags(nil, false); |
323 self:setwritetimeout(false); | 327 self:setwritetimeout(false); |
324 self:ondrain(); -- Be aware of writes in ondrain | 328 self:ondrain(); -- Be aware of writes in ondrain |
325 return; | 329 return; |
326 elseif partial then | 330 end |
331 if partial then | |
327 buffer[1] = data:sub(partial+1); | 332 buffer[1] = data:sub(partial+1); |
328 for i = #buffer, 2, -1 do | 333 for i = #buffer, 2, -1 do |
329 buffer[i] = nil; | 334 buffer[i] = nil; |
330 end | 335 end |
331 self:setwritetimeout(); | 336 self:setwritetimeout(); |
332 end | 337 end |
333 if err == "wantwrite" or err == "timeout" then | 338 if err == "wantwrite" or err == "timeout" then |
334 self:setflags(nil, true); | 339 self:setflags(nil, true); |
335 elseif err == "wantread" then | 340 elseif err == "wantread" then |
336 self:setflags(true, nil); | 341 self:setflags(true, nil); |
337 elseif err and err ~= "timeout" then | 342 elseif err ~= "timeout" then |
338 self:on("disconnect", err); | 343 self:on("disconnect", err); |
339 self:destroy(); | 344 self:destroy(); |
340 end | 345 end |
341 end | 346 end |
342 | 347 |