| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 596dd9f commit 31b0b52
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -590,59 +590,59 @@ function parserOnIncomingClient(res, shouldKeepAlive) { | |||
| 590 | 590 | } | |
| 591 | 591 | ||
| 592 | 592 | // client | |
| 593 | - function responseKeepAlive(res, req) { | ||
| 593 | + function responseKeepAlive(req) { | ||
| 594 | 594 | const socket = req.socket; | |
| 595 | 595 | ||
| 596 | - if (!req.shouldKeepAlive) { | ||
| 597 | - if (socket.writable) { | ||
| 598 | - debug('AGENT socket.destroySoon()'); | ||
| 599 | - if (typeof socket.destroySoon === 'function') | ||
| 600 | - socket.destroySoon(); | ||
| 601 | - else | ||
| 602 | - socket.end(); | ||
| 603 | - } | ||
| 604 | - assert(!socket.writable); | ||
| 605 | - } else { | ||
| 606 | - debug('AGENT socket keep-alive'); | ||
| 607 | - if (req.timeoutCb) { | ||
| 608 | - socket.setTimeout(0, req.timeoutCb); | ||
| 609 | - req.timeoutCb = null; | ||
| 610 | - } | ||
| 611 | - socket.removeListener('close', socketCloseListener); | ||
| 612 | - socket.removeListener('error', socketErrorListener); | ||
| 613 | - socket.removeListener('drain', ondrain); | ||
| 614 | - socket.once('error', freeSocketErrorListener); | ||
| 615 | - // There are cases where _handle === null. Avoid those. Passing null to | ||
| 616 | - // nextTick() will call getDefaultTriggerAsyncId() to retrieve the id. | ||
| 617 | - const asyncId = socket._handle ? socket._handle.getAsyncId() : undefined; | ||
| 618 | - // Mark this socket as available, AFTER user-added end | ||
| 619 | - // handlers have a chance to run. | ||
| 620 | - defaultTriggerAsyncIdScope(asyncId, process.nextTick, emitFreeNT, socket); | ||
| 621 | - } | ||
| 596 | + debug('AGENT socket keep-alive'); | ||
| 597 | + if (req.timeoutCb) { | ||
| 598 | + socket.setTimeout(0, req.timeoutCb); | ||
| 599 | + req.timeoutCb = null; | ||
| 600 | + } | ||
| 601 | + socket.removeListener('close', socketCloseListener); | ||
| 602 | + socket.removeListener('error', socketErrorListener); | ||
| 603 | + socket.once('error', freeSocketErrorListener); | ||
| 604 | + // There are cases where _handle === null. Avoid those. Passing null to | ||
| 605 | + // nextTick() will call getDefaultTriggerAsyncId() to retrieve the id. | ||
| 606 | + const asyncId = socket._handle ? socket._handle.getAsyncId() : undefined; | ||
| 607 | + // Mark this socket as available, AFTER user-added end | ||
| 608 | + // handlers have a chance to run. | ||
| 609 | + defaultTriggerAsyncIdScope(asyncId, process.nextTick, emitFreeNT, socket); | ||
| 622 | 610 | } | |
| 623 | 611 | ||
| 624 | 612 | function responseOnEnd() { | |
| 625 | - const res = this; | ||
| 626 | 613 | const req = this.req; | |
| 627 | 614 | ||
| 628 | 615 | if (req.socket && req.timeoutCb) { | |
| 629 | 616 | req.socket.removeListener('timeout', emitRequestTimeout); | |
| 630 | 617 | } | |
| 631 | 618 | ||
| 632 | 619 | req._ended = true; | |
| 633 | - if (!req.shouldKeepAlive || req.finished) | ||
| 634 | - responseKeepAlive(res, req); | ||
| 620 | + | ||
| 621 | + if (!req.shouldKeepAlive) { | ||
| 622 | + const socket = req.socket; | ||
| 623 | + if (socket.writable) { | ||
| 624 | + debug('AGENT socket.destroySoon()'); | ||
| 625 | + if (typeof socket.destroySoon === 'function') | ||
| 626 | + socket.destroySoon(); | ||
| 627 | + else | ||
| 628 | + socket.end(); | ||
| 629 | + } | ||
| 630 | + assert(!socket.writable); | ||
| 631 | + } else if (req.finished) { | ||
| 632 | + // We can assume `req.finished` means all data has been written since: | ||
| 633 | + // - `'responseOnEnd'` means we have been assigned a socket. | ||
| 634 | + // - when we have a socket we write directly to it without buffering. | ||
| 635 | + // - `req.finished` means `end()` has been called and no further data. | ||
| 636 | + // can be written | ||
| 637 | + responseKeepAlive(req); | ||
| 638 | + } | ||
| 635 | 639 | } | |
| 636 | 640 | ||
| 637 | 641 | function requestOnPrefinish() { | |
| 638 | 642 | const req = this; | |
| 639 | - const res = this.res; | ||
| 640 | - | ||
| 641 | - if (!req.shouldKeepAlive) | ||
| 642 | - return; | ||
| 643 | 643 | ||
| 644 | - if (req._ended) | ||
| 645 | - responseKeepAlive(res, req); | ||
| 644 | + if (req.shouldKeepAlive && req._ended) | ||
| 645 | + responseKeepAlive(req); | ||
| 646 | 646 | } | |
| 647 | 647 | ||
| 648 | 648 | function emitFreeNT(socket) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments