Re: FreeTDS and buffering on client side

Frediano Ziglio <[email protected]> Thu, 26 Oct 2017 09:20:09 +0100
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CAHt6W4c-9W5QVD+=Hc5z9GAoDqBiub4X5Lcz=2NhQBF5-saUbg@mail.gmail.com>
2017-10-26 7:14 GMT+01:00 LacaK <[email protected]>:
> Thank you very much Frediano,
>
> now , when I increase number of rows in table I can reproduce network
> failure.
>
> But behavior is other than I have expected.
>
> I was expecting, that dbnextrow() will return FAIL, but it seems, that call
> to dbnextrow() never returns ... it freezes somewhere in dblib.dll
> (I can not debug more because I use dblib.dll from Pascal program)
>
> Is it expected behavior?
>
> L.
>

No, should return an error.
TDSDUMP could help.

Frediano

>> 2017-10-25 11:38 GMT+01:00 LacaK <[email protected]>:
>>>
>>> Hi *,
>>>
>>> I would like to ask how FreeTDS performs buffering on client side.
>>> I use dblib as my client library (I do not set there DBBUFFER using
>>> "dbsetopt")
>>>
>>> I am trying simulate network failure in such way:
>>> 1. connect to MS SQL Server using dbopen()
>>> 2. I send SQL select using dbcmd(), dbsqlexec()
>>> 3. then I call dbresults()
>>> 4. here I pause program and unplug network cable to simulate network
>>> error
>>> 5. next I process rows in loop calling dbnextrow()
>>>
>>> Strange thing is that I can perform step 5 also when network cable is
>>> unpluged. So I have suspection, that all rows from select are already
>>> somewhere on client side. Probably handled already by underlaying libtds
>>> ?
>>>
>>> What is going to happen? Why I can still read rows when there is already
>>> broken network connection ?
>>> Thanks
>>>
>>> -Laco.
>>>
>> There are a lot of caching in between.
>> The server execute the query and starts sending back results.
>> Probably the results you are expecting are already sent by the server
>> when you disconnect the cable and are in the tcp socket buffer ready
>> to be parsed from your program. Try to return 1000000 rows and at
>> some point the program will fail (unless connection is really fast and
>> network buffer is big enough!).
>>
>> Frediano
>> _______________________________________________
>> FreeTDS mailing list
>> [email protected]
>> https://lists.ibiblio.org/mailman/listinfo/freetds
>>
>
> _______________________________________________
> FreeTDS mailing list
> [email protected]
> https://lists.ibiblio.org/mailman/listinfo/freetds