I still persist saying the you probably call the message pump directly or indirectly (for example your Log() function, or any component you use for display). I suggest you make a stripped down version of your program, just he bare minimum in a small project. If the problem persist with this small project, make it available for download somewhere. If I have time, I'll look at it.
-- Contribute to the SSL Effort. Visit http://www.overbyte.be/eng/ssl.html -- [EMAIL PROTECTED] Author of ICS (Internet Component Suite, freeware) Author of MidWare (Multi-tier framework, freeware) http://www.overbyte.be ----- Original Message ----- From: "Jack" <[EMAIL PROTECTED]> To: "ICS support mailing" <twsocket@elists.org> Sent: Thursday, May 19, 2005 9:31 PM Subject: [twsocket] Receive result of the first ReceiveStr() call twice -not resolved > 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 > -- 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