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