Engi wrote:
> Any ideas ? It's a real problem for me .

If the error is NOT "Error 10022 in function WSAASyncSelect", tell us
the exact line and exception message.

Otherwise, if it is still error 10022 in function WSAASyncSelect,
go to procedure TCustomWSocket.Listen in WSocket.pas, there should exist the
following comment:

    { FP:26/09/06 Are FD_READ and FD_WRITE really necessary ? Probably not ! }
    { Lodewijk Ellen reported a problem with W2K3SP1 triggering an AV in     }
    { accept. Keeping only FD_ACCEPT and FD_CLOSE solved the problem.        }
    { Anyway, a listening socket doesn't send nor receive any data so those  }
    { notification are useless.                                              }
    
If not, please either download and install latest V5-Beta or add
the fix from Lodewijk Ellen manually, even though you see the error
in XP SP2. 
    
    [..]
    <== // FSelectEvent := FD_READ   or FD_WRITE or
    <== //                 FD_ACCEPT or FD_CLOSE;
add ==> FSelectEvent := FD_ACCEPT or FD_CLOSE;
    iStatus      := WSocket_Synchronized_WSAASyncSelect(FHSocket, Handle,
                                                        FMsg_WM_ASYNCSELECT,
                                                        FSelectEvent);
    if iStatus <> 0 then begin
        SocketError('WSAASyncSelect');
        exit;
    end;
    [..]


Another small change which is not yet included in current Beta is in
procedure TCustomWSocket.Dup():

    [..]
    SetLingerOption;

    <== // FSelectEvent := FD_READ or FD_WRITE or FD_CLOSE or FD_CONNECT;
add ==> FSelectEvent := FD_READ or FD_WRITE or FD_CLOSE;
    iStatus      := WSocket_Synchronized_WSAASyncSelect(FHSocket, Handle,
                                                        FMsg_WM_ASYNCSELECT,
                                                        FSelectEvent);
    if iStatus <> 0 then begin
        SocketError('WSAAsyncSelect');
        Exit;
    end;
    [..]

Please report back whether that helped or not.

--
Arno Garrels [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html 

> 
> Thanks,
> Engi
> 
> -----Message d'origine-----
> De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> De la 
> part de Engi
> Envoyé : vendredi 6 avril 2007 13:50
> À : 'ICS support mailing'
> Objet : Re: [twsocket] Listen exception
> 
> 
> Exception at Listen() method
> 
> -----Message d'origine-----
> De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> De la 
> part de Fastream Technologies Envoyé : vendredi 6 avril 2007 12:59 À
> : ICS 
> support mailing Objet : Re: [twsocket] Listen exception
> 
> At which line do you get the exception?
> 
> ----- Original Message -----
> From: "Engi" <[EMAIL PROTECTED]>
> To: "'ICS support mailing'" <twsocket@elists.org>
> Sent: Friday, April 06, 2007 1:11 PM
> Subject: Re: [twsocket] Listen exception
> 
> 
> 
> I talked too quickly.
> I still have errors 10022 from time to time.
> 
> Here is my code:
> It is correct ?
> 
> 
> void __fastcall TThreadWORK::Execute()
> {
> try
> {
> WSocketServerWORK = new TWSocketServer(NULL);
> WSocketServerWORK->Proto = "tcp";
> WSocketServerWORK->Port = PortIP;
> WSocketServerWORK->Addr = AdrIP;
> WSocketServerWORK->LineMode = true;
> WSocketServerWORK->LineEnd = "\r\n";
> WSocketServerWORK->LingerOnOff = wsLingerOn; LingerTimeout = 5000;
> WSocketServerWORK->ClientClass =
> __classid(TTcpSrvClientWork);
> WSocketServerWORK->Banner = "";
> WSocketServerWORK->OnClientConnect =
> WSocketServerWORKClientConnect;
> WSocketServerWORK->OnClientDisconnect =
> WSocketServerWORKClientDisconnect;
> }
> catch(Sysutils::Exception &e)
> {
> if (WSocketServerWORK) delete WSocketServerWORK; WSocketServerWORK =
> NULL; 
> Terminate(); return; }
> 
> try
> {
> WSocketServerWORK->Listen();
> }
> catch(Sysutils::Exception &e)
> {
> if (WSocketServerWORK) delete WSocketServerWORK; WSocketServerWORK =
> NULL; 
> Terminate(); return; }
> 
> while (!Terminated)
> {
> ...
> }
> 
> WSocketServerWORK->ShutDown(0);
> delete WSocketServerWORK;
> }
> 
> 
> 
> 
> -----Message d'origine-----
> De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> De la 
> part de Engi Envoyé : mercredi 4 avril 2007 14:27 À : 'ICS support
> mailing' 
> Objet : Re: [twsocket] Listen exception
> 
> 
> Francois,
> 
> Thanks for this explanations.
> I moved all the lines from constructor to Execute() method and all is
> fine 
> now.
> 
> Engi
> 
> -----Message d'origine-----
> De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> De la 
> part de Francois Piette Envoyé : mercredi 4 avril 2007 13:15 À : ICS
> support 
> mailing Objet : Re: [twsocket] Listen exception
> 
>> No, I create the instance in the thread constructor.
> 
> Any constructor for TThread class is executed in the context of the
> creating 
> [likely main] thread, not the [future] created thread ! The new thread
> context exists only at the very beginning of the Execute method. So
> you must 
> create any event-driven message based component from the Execute
> method or 
> their events will run in the creating [main] thread and cause lot's of
> trouble when you access the component from the context of the created
> thread.
> 
> The execution context [thread context] has nothing to do with the
> fact that 
> the executed code is part or not of the TThread class. It is only
> related if 
> TThread.Execute is in the call stack. This is a frequent error for
> newbies 
> in multithreading.
> 
>> Must I create instance in Execute method
> 
> Yes, you have.
> 
>> or deplace listening method in constructor ?
> 
> You must too, or in any function/procedure called directly or
> indirectly 
>> from the Execute method. That is you have the Execute method in the
>> call 
> stack.
> 
> 
> If you are unsure about the thread context a given function is run,
> you may 
> call GetCurrentThreadID and compare with the value f the same function
> called at the very beginning of the Execute method.
> 
> 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
> 
> --
> 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
> 
> --
> 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

Reply via email to