Konvertierung von SOCKADDR in SOCKADDR_IN so richtig?



  • Hi,

    wie der Titel schon sagt will ich eine SOCKADDR-Instanz in eine SOCKADDR_IN-Instanz umwandeln. Ich hab bisher nie mit memset & co. gearbeitet. Deshalb weis ich auch nicht ob das so richtig ist. Ich will ja auch nichts falsches im Speicher überschreiben.

    SOCKADDR otherAdress;   //bekommt irgendwann wert von accept() zugewiesen
    SOCKADDR_IN addr;       //soll wert von otherAdress bekommen
    
    //irgendwann im quellcode
    
    ::memcpy(&addr, &otherAdress, sizeof(SOCKADDR));
    


  • die sind alle gleichgroß, ein simples cast ala SOCKADDR_IN s; (SOCKADDR)s; sollte es auch tun .... in der annahme das du das auf ein bind oder sowas anweden willst



  • Ich möchte eigentlich keinen C-Cast verwenden (dann doch lieber static-, dynamic- oder reinterpret_cast welche ja leider nicht funktionieren).

    Ich brauche das ganze für eine eigene Address-Klasse

    // kurzform
    class Address
    {
    public:
      SOCKADDR_IN* Get() 
      {
        return &m_addr;
      };
      bool operator = (SOCKADDR& otherAdress)
      {
        ::memcpy(&m_addr, &otherAdress, sizeof(SOCKADDR));
        return true;  //sinnlos, ich weis :)
      };
    
    protected:
      SOCKADDR_IN m_addr;
    }
    

    Wenn ich später Daten von einem Socket empfange, dann kann ich so die Adresse des Clients in meine Klasse übernehmen.

    Address  ClientAddress;
    SOCKET   sock;    //create und bind überspringe ich mir mal
    SOCKADDR addr;
    int      addressLenght = 0;
    
    listen(sock,1);
    
    SOCKET newSock = accept(sock, &addr, &addressLenght);
    
    ClientAddress = addr;
    


  • Wieso sollten die Casts nicht funktionieren? Für deine Zwecke ist reinterpret_cast genau der richtige Kandidat:

    m_adr = * reinterpret_cast<SOCKADR_IN*>(&otherAdress);
    

    (übrigens sollte der op= lieber das zugewisene Objekt (*this) per Referenz zurückgeben - damit kannst du dann Zuweisungsketten ala ad1=ad2=meine_adresse; verwenden)


Anmelden zum Antworten