Hello all,

I'm using nsIInputStreamPump to asynchronously read string data from a socket from JavaScript in my XULRunner application. I've got everything working except one small problem - I can't keep the socket connection opened!

Data streams down fine but when there's nothing there it closes after a few seconds, then I have to re-open. This is regardless of what setting I use for nsISocketTransportService.setTimeout for both TIMEOUT_CONNECT and TIMEOUT_READ_WRITE. Is there another setting somewhere maybe for nsIRequest that configures a separate timeout?

Thanks in advance for any help.

Below is the relevant code...

- Edmond -

(function() {
    ...
    const nsISocketTransportService =
                Cc["@mozilla.org/network/socket-transport-service;1"]
                     .getService(Ci.nsISocketTransportService);

    this.connect = function (aHost, aPort)
    {
        ...

        _tpSrv = nsISocketTransportService.createTransport(null, 0, aHost,
                                                           aPort, null);

        //_tpSrv.setTimeout(Ci.nsISocketTransport.TIMEOUT_CONNECT, 0xFFFFFFFF);
//_tpSrv.setTimeout(Ci.nsISocketTransport.TIMEOUT_READ_WRITE, 0xFFFFFFFF);

        _asyncPacketReader = new AsyncPacketReaderUTF8(
                                    _tpSrv.openInputStream(0, 0, 0), // 
Non-Blocking, Buffered
                                    PACKET_END,
                                    that.onPacketArrived);
        ...
   };

...

}).apply(venkLink.client);



AsyncPacketReaderUTF8 = function (aInputStream, aPacketEndStr, oOnPacketArrived)
{
    ... 

    var _isp = Cc["@mozilla.org/network/input-stream-pump;1"]
                .createInstance(Ci.nsIInputStreamPump);
    _isp.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE;
    _isp.init(aInputStream, -1, -1, 0, 0, false);

    /** @type {nsIStreamListener : nsIRequestObserver} Implementation */
    var _sl = {};
    _sl.onStartRequest = function (request, context) {};
    _sl.onStopRequest = function (request, context, status) {};
    _sl.onDataAvailable = function (request, context, inputStream, offset,
                                    count)
    {
        var cis = Cc["@mozilla.org/intl/converter-input-stream;1"]
                        .createInstance(Ci.nsIConverterInputStream);
        var wrapStr = {};
        cis.init(inputStream, "UTF-8", 0, 0);
        cis.readString(count, wrapStr);

        ...
    };

    _isp.asyncRead(_sl, null);

};

--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
_______________________________________________
dev-tech-network mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-network

Reply via email to