Skip to content

Commit

Permalink
Avoid double on('connect') for non-HTTP connects
Browse files Browse the repository at this point in the history
  • Loading branch information
opichals committed May 9, 2018
1 parent 99d2fed commit 87bfcdd
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
25 changes: 15 additions & 10 deletions libs/network/socketserver.c
Expand Up @@ -375,18 +375,23 @@ void socketReceived(JsVar *connection, JsVar *socket, SocketType socketType, JsV
JsVar *reader = isServer ? connection : socket;
bool isHttp = (socketType&ST_TYPE_MASK)==ST_HTTP;
bool hadHeaders = jsvGetBoolAndUnLock(jsvObjectGetChild(reader,HTTP_NAME_HAD_HEADERS,0));
if (!hadHeaders && (!isHttp || httpParseHeaders(receiveData, reader, isServer))) {
hadHeaders = true;
jsvObjectSetChildAndUnLock(reader, HTTP_NAME_HAD_HEADERS, jsvNewFromBool(hadHeaders));

if (isServer) {
JsVar *server = jsvObjectGetChild(connection,HTTP_NAME_SERVER_VAR,0);
JsVar *args[2] = { connection, socket };
jsiQueueObjectCallbacks(server, HTTP_NAME_ON_CONNECT, args, isHttp ? 2 : 1);
jsvUnLock(server);
if (!hadHeaders) {
if (isHttp && httpParseHeaders(receiveData, reader, isServer)) {
hadHeaders = true;

// on connect only when just parsed the HTTP headers
if (isServer) {
JsVar *server = jsvObjectGetChild(connection,HTTP_NAME_SERVER_VAR,0);
JsVar *args[2] = { connection, socket };
jsiQueueObjectCallbacks(server, HTTP_NAME_ON_CONNECT, args, isHttp ? 2 : 1);
jsvUnLock(server);
} else {
jsiQueueObjectCallbacks(connection, HTTP_NAME_ON_CONNECT, &socket, 1);
}
} else {
jsiQueueObjectCallbacks(connection, HTTP_NAME_ON_CONNECT, &socket, 1);
hadHeaders = true;
}
jsvObjectSetChildAndUnLock(reader, HTTP_NAME_HAD_HEADERS, jsvNewFromBool(hadHeaders));
}
if (!hadHeaders) {
// no headers yet, no 'data' callback
Expand Down
7 changes: 6 additions & 1 deletion tests/test_net_socket.js
@@ -1,6 +1,7 @@
// Socket server and client test

var result = 0;
var connectCount = 0;
var net = require("net");

var server = net.createServer(function(c) { //'connection' listener
Expand All @@ -10,14 +11,18 @@ var server = net.createServer(function(c) { //'connection' listener
server.listen(4444);

var client = net.connect({port: 4444}, function() { //'connect' listener
var body='';
console.log('client connected');
connectCount++;

client.on('data', function(data) {
console.log(">"+JSON.stringify(data));
result = data=="42";
body += data;
server.close();
});
client.on('end', function() {
console.log('client disconnected');
result = body=="42" && connectCount==1;
});
});

0 comments on commit 87bfcdd

Please sign in to comment.