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
Post a Comment