@@ -229,7 +229,6 @@ function Socket(options) {
229229 }
230230
231231 // shut down the socket when we're finished with it.
232- this.on('finish', onSocketFinish);
233232 this.on('_socketEnd', onSocketEnd);
234233
235234 initSocketHandle(this);
@@ -273,39 +272,42 @@ Socket.prototype._unrefTimer = function _unrefTimer() {
273272
274273function shutdownSocket(self, callback) {
275274 var req = new ShutdownWrap();
276- req.oncomplete = callback ;
275+ req.oncomplete = afterShutdown ;
277276 req.handle = self._handle;
277+ req.callback = callback;
278278 return self._handle.shutdown(req);
279279}
280280
281281// the user has called .end(), and all the bytes have been
282282// sent out to the other side.
283- function onSocketFinish( ) {
284- // If still connecting - defer handling 'finish' until 'connect' will happen
283+ Socket.prototype._final = function(cb ) {
284+ // If still connecting - defer handling `_final` until 'connect' will happen
285285 if (this.connecting) {
286- debug('osF : not yet connected');
287- return this.once('connect', onSocketFinish );
286+ debug('_final : not yet connected');
287+ return this.once('connect', () => this._final(cb) );
288288 }
289289
290- debug('onSocketFinish');
291290 if (!this.readable || this._readableState.ended) {
292- debug('oSF: ended, destroy', this._readableState);
291+ debug('_final: ended, destroy', this._readableState);
292+ cb();
293293 return this.destroy();
294294 }
295295
296- debug('oSF : not ended, call shutdown()');
296+ debug('_final : not ended, call shutdown()');
297297
298298 // otherwise, just shutdown, or destroy() if not possible
299- if (!this._handle || !this._handle.shutdown)
299+ if (!this._handle || !this._handle.shutdown) {
300+ cb();
300301 return this.destroy();
302+ }
301303
302304 var err = defaultTriggerAsyncIdScope(
303- this[async_id_symbol], shutdownSocket, this, afterShutdown
305+ this[async_id_symbol], shutdownSocket, this, cb
304306 );
305307
306308 if (err)
307309 return this.destroy(errnoException(err, 'shutdown'));
308- }
310+ };
309311
310312
311313function afterShutdown(status, handle, req) {
@@ -314,6 +316,8 @@ function afterShutdown(status, handle, req) {
314316 debug('afterShutdown destroyed=%j', self.destroyed,
315317 self._readableState);
316318
319+ this.callback();
320+
317321 // callback may come after call to destroy.
318322 if (self.destroyed)
319323 return;
0 commit comments