Skip to content

Commit 26e9881

Browse files
robertsipkayichoi
authored andcommitted
Fix socket destroy in case of no connection (#955)
IoT.js-DCO-1.0-Signed-off-by: Robert Sipka [email protected]
1 parent 9ac0a3b commit 26e9881

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

src/js/net.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ Socket.prototype.destroy = function() {
191191
// unset timeout
192192
clearSocketTimeout(self);
193193

194-
if (self._writableState.ended) {
194+
if (self._writableState.ended && self._handle) {
195195
close(self);
196196
state.destroyed = true;
197197
} else {
@@ -417,7 +417,7 @@ function onSocketFinish() {
417417
var self = this;
418418
var state = self._socketState;
419419

420-
if (!state.readable || self._readableState.ended) {
420+
if (!state.readable || self._readableState.ended || !self._handle) {
421421
// no readable stream or ended, destroy(close) socket.
422422
return self.destroy();
423423
} else {
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/* Copyright 2017-present Samsung Electronics Co., Ltd. and other contributors
2+
*
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
// Copyright Joyent, Inc. and other Node contributors.
17+
//
18+
// Permission is hereby granted, free of charge, to any person obtaining a
19+
// copy of this software and associated documentation files (the
20+
// "Software"), to deal in the Software without restriction, including
21+
// without limitation the rights to use, copy, modify, merge, publish,
22+
// distribute, sublicense, and/or sell copies of the Software, and to permit
23+
// persons to whom the Software is furnished to do so, subject to the
24+
// following conditions:
25+
//
26+
// The above copyright notice and this permission notice shall be included
27+
// in all copies or substantial portions of the Software.
28+
//
29+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
30+
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32+
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
33+
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
34+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
35+
// USE OR OTHER DEALINGS IN THE SOFTWARE.
36+
37+
'use strict';
38+
require('node/common');
39+
var net = require('net');
40+
41+
var sock = new net.Socket();
42+
sock.end(); // Should not throw.

test/testsets.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
],
114114
"node/parallel": [
115115
{ "name": "test-assert.js" },
116-
{ "name": "test-net-bind-twice.js" }
116+
{ "name": "test-net-bind-twice.js" },
117+
{ "name": "test-net-end-without-connect.js" }
117118
]
118119
}

0 commit comments

Comments
 (0)