Mercurial > prosody-hg
comparison net/server_event.lua @ 8529:257fd322fc9f
net.server_event: Better outgoing connection error handling
Same as 67311cda0625. Check for readability. If a socket is readable
after initial connection, it likely means an error, so we call the
readcallback for that connection to handle it (and ultimately close).
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 23 Feb 2018 15:33:02 +0000 |
| parents | 4a5c6f6214ee |
| children | 075df839c110 |
comparison
equal
deleted
inserted
replaced
| 8528:67311cda0625 | 8529:257fd322fc9f |
|---|---|
| 103 if EV_TIMEOUT == event then -- timeout during connection | 103 if EV_TIMEOUT == event then -- timeout during connection |
| 104 self.fatalerror = "connection timeout" | 104 self.fatalerror = "connection timeout" |
| 105 self:ontimeout() -- call timeout listener | 105 self:ontimeout() -- call timeout listener |
| 106 self:_close() | 106 self:_close() |
| 107 debug( "new connection failed. id:", self.id, "error:", self.fatalerror ) | 107 debug( "new connection failed. id:", self.id, "error:", self.fatalerror ) |
| 108 elseif EV_READWRITE == event then | |
| 109 self.readcallback(event); | |
| 108 else | 110 else |
| 109 if plainssl and has_luasec then -- start ssl session | 111 if plainssl and has_luasec then -- start ssl session |
| 110 self:starttls(self._sslctx, true) | 112 self:starttls(self._sslctx, true) |
| 111 else -- normal connection | 113 else -- normal connection |
| 112 self:_start_session(true) | 114 self:_start_session(true) |
| 114 debug( "new connection established. id:", self.id ) | 116 debug( "new connection established. id:", self.id ) |
| 115 end | 117 end |
| 116 self.eventconnect = nil | 118 self.eventconnect = nil |
| 117 return -1 | 119 return -1 |
| 118 end | 120 end |
| 119 self.eventconnect = addevent( base, self.conn, EV_WRITE, callback, cfg.CONNECT_TIMEOUT ) | 121 self.eventconnect = addevent( base, self.conn, EV_READWRITE, callback, cfg.CONNECT_TIMEOUT ) |
| 120 return true | 122 return true |
| 121 end | 123 end |
| 122 function interface_mt:_start_session(call_onconnect) -- new session, for example after startssl | 124 function interface_mt:_start_session(call_onconnect) -- new session, for example after startssl |
| 123 if self.type == "client" then | 125 if self.type == "client" then |
| 124 local callback = function( ) | 126 local callback = function( ) |
