Software / code / prosody
Comparison
net/server_epoll.lua @ 7554:c2decf88e249
net.server_epoll: Use first writable event to signal onconnect
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 10 Aug 2016 20:59:54 +0200 |
| parent | 7553:4f3e4a092348 |
| child | 7555:f3abb5f891eb |
comparison
equal
deleted
inserted
replaced
| 7553:4f3e4a092348 | 7554:c2decf88e249 |
|---|---|
| 372 conn = client; | 372 conn = client; |
| 373 server = server; | 373 server = server; |
| 374 created = gettime(); | 374 created = gettime(); |
| 375 listeners = listeners; | 375 listeners = listeners; |
| 376 _pattern = pattern or server._pattern; | 376 _pattern = pattern or server._pattern; |
| 377 onwriteable = interface.onconnect; | |
| 377 writebuffer = {}; | 378 writebuffer = {}; |
| 378 tls = tls; | 379 tls = tls; |
| 379 }, interface_mt); | 380 }, interface_mt); |
| 380 if client.getpeername then | 381 if client.getpeername then |
| 381 conn.peer = {client:getpeername()} | 382 conn.peer = {client:getpeername()} |
| 395 local client = wrapsocket(conn, self, nil, self.listeners, self.tls); | 396 local client = wrapsocket(conn, self, nil, self.listeners, self.tls); |
| 396 if self.tls then | 397 if self.tls then |
| 397 client._tls = false; | 398 client._tls = false; |
| 398 client:starttls(); | 399 client:starttls(); |
| 399 else | 400 else |
| 400 self.listeners.onconnect(client); | 401 client:setflags(false, true); |
| 401 client:setflags(true); | |
| 402 end | 402 end |
| 403 client:setreadtimeout(); | 403 client:setreadtimeout(); |
| 404 end | 404 end |
| 405 | 405 |
| 406 function interface:pause() | 406 function interface:pause() |
| 417 addtimer(t, function () self:setflags(true); end); | 417 addtimer(t, function () self:setflags(true); end); |
| 418 end | 418 end |
| 419 end | 419 end |
| 420 | 420 |
| 421 function interface:onconnect() | 421 function interface:onconnect() |
| 422 self.onreadable = nil; | |
| 423 self.onwriteable = nil; | 422 self.onwriteable = nil; |
| 424 self.listeners.onconnect(self); | 423 self.listeners.onconnect(self); |
| 424 self:setflags(true); | |
| 425 return self:onwriteable(); | |
| 425 end | 426 end |
| 426 | 427 |
| 427 local function addserver(addr, port, listeners, pattern, tls) | 428 local function addserver(addr, port, listeners, pattern, tls) |
| 428 local conn, err = socket.bind(addr, port, cfg.tcp_backlog); | 429 local conn, err = socket.bind(addr, port, cfg.tcp_backlog); |
| 429 if not conn then return conn, err; end | 430 if not conn then return conn, err; end |
| 449 created = gettime(); | 450 created = gettime(); |
| 450 listeners = listeners; | 451 listeners = listeners; |
| 451 _pattern = pattern; | 452 _pattern = pattern; |
| 452 writebuffer = {}; | 453 writebuffer = {}; |
| 453 tls = tls; | 454 tls = tls; |
| 454 onreadable = interface.onconnect; | |
| 455 onwriteable = interface.onconnect; | 455 onwriteable = interface.onconnect; |
| 456 peer = { addr, port }; | 456 peer = { addr, port }; |
| 457 }, interface_mt); | 457 }, interface_mt); |
| 458 fds[client:getfd()] = client; | 458 fds[client:getfd()] = client; |
| 459 client:setflags(false, true); | 459 client:setflags(false, true); |