networking - Firefox add-on: hanging TCP connections -


i'm creating firefox add-on contains server listening tcp connections on 1 port. problem not close connection: after sending fin-ack, , receiving ack, tcp session left open if client not send in return fin-ack.

only connections not closed completely. after while, many tc connections hanging, , firefox cannot open new file handle, or receive new connection.

tcp localhost.localdomain:commtact-https->localhost.localdomain:46951 (close_wait) 

i not find way, preferably in add-on (but tried on client side) make sure tcp connections closed correctly. here server functionality looks in add-on:

init_server: function(port) { server.result = {}; server.listener = {     onsocketaccepted : function(serversocket, transport) {         server.result.sout = transport.openoutputstream(0,0,0);         var instream = transport.openinputstream(0,0,0);         server.result.sin = components.classes["@mozilla.org/binaryinputstream;1"].             createinstance(components.interfaces.nsibinaryinputstream);         server.result.sin.setinputstream(instream);          server.debug("new incoming connection");          var datalistener = {             onstartrequest: function(request, context) {                 server.debug("onstartrequest");             },             onstoprequest: function(request, context, status) {                 server.debug("onstoprequest"); //              instream.close(); //          delete instream; //              server.result.sout.close(); //          server.result.sin.close();             },             ondataavailable: function(request, context, inputstream, offset, count) {               var sis = components.classes ["@mozilla.org/scriptableinputstream;1"].createinstance (components.interfaces.nsiscriptableinputstream);               sis.init(inputstream);               var str = sis.read(count);               var suc = components.classes ["@mozilla.org/intlscriptableunicodeconverter"].createinstance(components.interfaces.nsiscriptableunicodeconverter);               suc.charset = "utf-8";               var line = suc. converttounicode (str);               server.debug(line);                [ ... process data ... ]  //        instream.close(); //        server.result.sout.close(); //        server.result.sin.close(); //        delete instream;             },         };          // listen new data         var pump = components.classes["@mozilla.org/network/input-stream-pump;1"].createinstance(components.interfaces.nsiinputstreampump);         pump.init(instream, -1, -1, 0, 0, false); //screenserver.result.sin         pump.asyncread(datalistener, null);     },     onstoplistening : function(serversocket, status){         server.debug("client dead?");         server.init_server(server.port);     }, };    server.socket = null;   server.socket = components.classes["@mozilla.org/network/server-socket;1"].getservice(components.interfaces.nsiserversocket);    server.socket.init(port, true, -1);    server.socket.asynclisten(server.listener); } 

i think need save transport you're passed in call onsocketaccepted , invoke close() on that.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -