CAsyncSocket::OnClose - welcher Socket, wenn mehrere geöffnet sind?



  • Hallo,

    plage mich mit einem Socket Server herum (CAsyncSocket::Listen), der auf einem port auf mehrere Socket Clients hört.

    Dafür habe ich ein array m_arrayAcceptSocket[] definiert, in das ich die akzeptierten Clients (Sockets) eintrage. Funktioniert alles soweit einwandfrei.

    PROBLEM: Wenn ein Client auf seiner Seite die SocketVerbindung schließt (z.B. wg. Timeout) wird richtigerweise das Event ::OnClose bei meinem Server erzeugt. Nur wie kann ich feststellen, WELCHER Client dieses Ereignis ausgelöst hat?

    Danke und Gruß
    Klaus



  • entweder dein clientsocket schickt eien ID mit, oder du stellst halt fest, welcher socket gerade geschlossen wurde: wenn du fuer jede client-anfrage einen neuen serversocket mit new allokierst, dann muesste eben dieser serversocket eine ID rausruecken, zB seine Array-position.

    Esco



  • Oder du gehst einfach dein Array durch und schaust welcher Handle der richtige ist.

    if(handleclose == akthandle)
    // dies ist der Socket



  • Esco schrieb:

    entweder dein clientsocket schickt eien ID mit, oder du stellst halt fest, welcher socket gerade geschlossen wurde: wenn du fuer jede client-anfrage einen neuen serversocket mit new allokierst, dann muesste eben dieser serversocket eine ID rausruecken, zB seine Array-position.

    Esco

    OnClose bei ASyncSocket schickt eben keine ID mit, deswegen habe ich ja das Problem, dass ich nicht weiss, welcher Socket den Event auslöst.

    Welcher Socket welchen Handle hat, weiss ich, ist ja Bestandteil der Klassenstruktur (CAsyncSocket::m_hSocket)



  • [quote="Unix-Tom"]Oder du gehst einfach dein Array durch und schaust welcher Handle der richtige ist.

    if(handleclose == akthandle)
    // dies ist der Socket[/quote]

    Tja, das ist genau das, was ich suche: welcher handle ist derjenige, der schließt ? (Bei Deinem Bsp handleclose)

    Kannst Du mir sagen, woher die Info handleclose kommt?



  • Welcher Socket welchen Handle hat, weiss ich, ist ja Bestandteil der Klassenstruktur (CAsyncSocket::m_hSocket)

    Das reicht dann doch.



  • [quote="cppnoob"][quote]Welcher Socket welchen Handle hat, weiss ich, ist ja Bestandteil der Klassenstruktur (CAsyncSocket::m_hSocket)[/quote]

    Das reicht dann doch.[/quote]

    Das war doch gar nicht die Frage! Nochmals: wer (welcher Socket oder handle) löst den Event OnClose aus?



  • wenn du in OnClose auf m_hSocket zugreifst, dann weißt du es doch. 😕 😕



  • [quote="cppnoob"]wenn du in OnClose auf m_hSocket zugreifst, dann weißt du es doch. 😕 😕[/quote]

    und nochmal: ich habe bis zu 100 Sockets/handles offen, bekomme aber von OnClose keinen Handle mit übergeben.

    Natürlich kann ich mit m_hSocket auf jeden einzelnen Socket zugreifen, aber ich weiss noch immer nicht, welcher Socket den Event OnClose ausgelöst hat!



  • Also ich raff es nicht. Für jeden Socket existiert doch ein Objekt vom CAsyncSocket und jedes hat sein eigenes m_hSocket.

    Es ist ja nicht so das ein Objekt vom Typ CAsyncSocket für deine 100 Sockets zuständig ist...



  • du schickst einfach eine nachricht an deinen hauptthread das jetzt onclose aufgerufen wurde.
    dieser nachricht kannst du alles mitgeben.


Anmelden zum Antworten