Socket an Thread übergeben



  • Ich komme mit dem Zeiger-zeugs nicht so klar 😞
    hab schon versucht im Thread einen neuen Socket zu erzeugen und den zeiger gleichzusetzen, funktionierte aber nicht? Gibt's da keine einfache Lösung?
    Ein kurzes Codebeispiel wäre sehr hilfreich 🙂

    THX

    John



  • Mal langsam ich verstehe nicht ganz was du meinst. Du hast einmal deinen "WinMain Thread" und hast jetzt einen zweiten angelegt. In diesem zweitem Thread erstellst du ein socket.

    Und was hat das jetzt mit zeigern zu tun?



  • HANDLE CreateThread(
      LPSECURITY_ATTRIBUTES lpThreadAttributes,
      SIZE_T dwStackSize,
      LPTHREAD_START_ROUTINE lpStartAddress,
      LPVOID lpParameter, // <- "[in] Pointer to a variable to be passed to the thread."
      DWORD dwCreationFlags,
      LPDWORD lpThreadId
    );
    


  • Also ich habe einen Serversocket und wenn in der LRESULT CALLBACK die FD_ACCEPT kommt würde ich gerne den socket erstellen und einen thread starten der den socket handled.
    @geeky:
    LPVOID lpParameter, // <- "[in] Pointer to a variable to be passed to the thread."
    Joa aber der erwartet da ein void, also bestenfalls einen Zeiger und wie ich oben schon betont habe, habe ich Probleme mit Zeigern, da ich in Java sowas nicht hatte ...

    MfG

    John



  • Also nochmal kurz zusammengeasst, soll ein HTTP-Proxy werden ...
    pseudo:

    int WINAPI WinMain(param)
    {
       //mainwindow mit GUI (Start-/Stop Button) erstellen
    }
    LRESULT CALLBACK WndProc(param)
    {
       //infos abfragen
       switch(msg)
       {
          //cases
          case WM_COMMAND:
          {
             _beginthread(MyAcceptingThread, 0, NULL); //damit der button benutzbar bleibt
          }
          case WM_SOCKET_NOTIFY:
          {
             if(wParam == serverSock && lParam == FD_ACCEPT)
             SOCKET proxySock = accept(serverSock,0,0);
             _beginthread(LeseThread, 0, &proxySock); // wie gebe ich den socket an?
          }
       }
    }
    
    void MyAccptingThread(PVOID)
    {
       //serverSocket initialisieren
       while(buttonFlag == start)   //prüft ob gestopt wurde
       {
          listen(serverSock,SOMAXCONN);   //wartet auf connections
       }  
    }
    
    void LeseThread(PVOID zeigerParam)  //soll vom übergebenen socket (client) lesen können
    {
       SOCKET sock = zeigerParam; //wie kann ich dem Socket den übergebenen socket
                                  //zuweisen bzw. vom diesem lesen ?
       //lesen vom socket
    }
    


  • Afaik müsste es so aussehen:

    SOCKET sock = *zeigerParam;
    


  • Ein Cast fehlt noch;

    SOCKET socket = (SOCKET)zeigerParam;

    ungefähr so



  • Danke, das Cast hatte mir gefehlt, er compiled es jetzt fehlerfrei 👍


Anmelden zum Antworten