Re: FreeTDS and buffering on client side

LacaK <[email protected]> Thu, 26 Oct 2017 08:14:20 +0200
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[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.

> 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
>