I celebrated a little too early. I am getting this problem again
in further testing after I changed Close() to CloseDelayed();
The difference is, I'm not getting result of the first ReceiveStr()
twice. Instead, I get the result of the second ReceiveStr() twice.
I think this is because CloseDelayed() delayed the Close().
What I don't understand is why the buffer isn't cleared after
ReceiveStr() in both scenarios of Close() and CloseDelayed().

I reason I thought it was fixed is because I tested from
an allowed IP earlier and got a very short response back from
the proxy server. The whole message was retrieved in the first
ReceiveStr() call so I didn't get a chance to call ReceiveStr()
twice. I then run the same app on a blocked IP. The proxy sends
a longer message (the error message) and it is retrieved in
two ReceiveStr() calls. Then I found that the second ReceiveStr()
result was duplicated.

-- 
Best regards,
Jack

Thursday, May 19, 2005, 10:53:49 AM, you wrote:

J> Francois, thanks! This fixed the problem! It's actually in the FAQ:

J> - CloseDelayed

J> Is in most cases the preferred way. It will post a message to
J> itself to close the TWSocket. This means that the socket closure
J> is done outside the code that calls the CloseDelayed, meaning a
J> while later. The message handler will call Close.

J> - Close

J> Attempt to gracefully close the socket. If there is still some
J> data waiting in the buffers it will try to send it. ***Do not use
J> Close from within any TWSocket events, instead use CloseDelayed.***


J> Thursday, May 19, 2005, 2:46:47 AM, you wrote:

FP>> Use CloseDelayed instead of Close.

>>> Hello Wilfried,
>>> 
>>> Sure. Below is my event handler code. Hope I'm doing something
>>> wrong, otherwise, it's really strange. TProxyChecker is the owner
>>> object of the TProxySocket object array. TProxySocket is derived
>>> from TWSocket.
>>> 
>>> procedure TProxyChecker.WSocketDataAvailable(Sender: TObject; ErrCode: 
>>> Word);
>>> var s: String;
>>> begin
>>>   if ErrCode = 0 then
>>>     with TProxySocket(Sender) do
>>>     begin
>>>       s := ReceiveStr();
>>>       Log(s);
>>>       Close();
>>>     end;
>>> end;
>>> 
>>> The destination server is a commercial http proxy server.
>>> I tried using #13#10 and #13#10#13#10, I different strings
>>> read back from ReceiveStr. But the second string includes
>>> the first string in both cases. So it shouldn't be the server
>>> sending the string twice.
>>> 
>>> BTW, I'm using the latest ICS.
>>> 
>>> -- 
>>> Best regards,
>>> Jack
>>> 
>>> Wednesday, May 18, 2005, 3:31:32 PM, you wrote:
>>> 
>>> WM> Hello Jack,
>>> 
>>> WM> Can you show your OnDataAvailable handler ?
>>> WM> Eventually download SocketSpy from 'user made' page and 'hang' it
>>> WM> between client and server. Then you see exacly what is sent by server.
>>> 
>>> WM> ---
>>> WM> Rgds, Wilfried
>>> WM> http://www.mestdagh.biz
>>> 
>>> WM> Wednesday, May 18, 2005, 20:48, Jack wrote:
>>> 
>>> >> Hello Francois and all,
>>> 
>>> >> I'm using a TWSocket client in LineMode with LineEnd set to #13#10.
>>> >> I connect to a HTTP proxy server using CONNECT command. I then get
>>> >> a reply back from the HTTP proxy from ReceiveStr()
>>> 
>>> >> Things look OK except that I am receiving the data from the first
>>> >> ReceiveStr() call twice. I get two WSocketDataAvailable messages for
>>> >> 3 lines in the HTTP response:
>>> 
>>> >>   Line 1: HTTP/1.0 200 Connection established
>>> >>   Line 2: Proxy-agent: Proxy+ 3.00
>>> >>   Line 3: (Blank line)
>>> 
>>> >> However, I'm getting the first ReceiveStr() result twice, see below:
>>> >> I'm getting "HTTP/1.0 200 Connection established" twice:
>>> 
>>> >> 5/18/2005 2:36:43 PM WSocketDataAvailable idx=0 addr=127.0.0.1:4480 
>>> >> ErrCode=0
>>> >> 5/18/2005 2:36:43 PM HTTP/1.0 200 Connection established
>>> >> 5/18/2005 2:36:43 PM
>>> >> 5/18/2005 2:36:43 PM 
>>> >> 5/18/2005 2:36:43 PM WSocketDataAvailable idx=0 addr=127.0.0.1:4480 
>>> >> ErrCode=0
>>> >> 5/18/2005 2:36:43 PM HTTP/1.0 200 Connection established
>>> >> Proxy-agent: Proxy+ 3.00
>>> 
>>> 
>>> >> I then changed LineEnd to #13#10#13#10, I still get the result of
>>> >> the first ReceiveStr() twice, this time the result is two lines:
>>> 
>>> >>   HTTP/1.0 200 Connection established
>>> >>   Proxy-agent: Proxy+ 3.00
>>> >>   (Blank line)
>>> 
>>> >> 5/18/2005 2:40:11 PM WSocketDataAvailable idx=0 addr=127.0.0.1:4480 
>>> >> ErrCode=0
>>> >> 5/18/2005 2:40:11 PM HTTP/1.0 200 Connection established
>>> >> Proxy-agent: Proxy+ 3.00
>>> 
>>> 
>>> >> 5/18/2005 2:40:11 PM 
>>> >> 5/18/2005 2:40:11 PM 
>>> >> 5/18/2005 2:40:11 PM WSocketDataAvailable idx=0 addr=127.0.0.1:4480 
>>> >> ErrCode=0
>>> >> 5/18/2005 2:40:11 PM HTTP/1.0 200 Connection established
>>> >> Proxy-agent: Proxy+ 3.00
>>> 
>>> 
>>> >> It seems that, somehow the first ReceiveStr() didn't remove the data
>>> >> from the buffer. Or am I missing anything?
>>> 
>>> 
>>> >> -- 
>>> >> Best regards,
>>> >> Jack
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> To unsubscribe or change your settings for TWSocket mailing list
>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>> Visit our website at http://www.overbyte.be
>>> 





-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to