Socket Frage



  • hab ne frage zu den sockets. und zwar hab ich eine "Funktion" (DWORD WINAPI ThreadSocksxy(void *param)) die ich 2x als thread starte in dieser "Funktion" ist int sock[1000]; deklariert und nun meine frage: ich benutze z.b. 2 sockets socket[1] und socket[2] im thread 1 und 2, wenn ich in thread 1 schon connecte muss ich dann im thread 2 auch noch connecten auf was ich hinaus will ist ob es der gleiche socket[1] im thread 2 ist wie der im thread 1 socket[1]?



  • Jeder Thread hat seine eigene "Kopie" von lokalen Variablen:

    void Foo()
    {
        int stuff[1000]; // <- jeder Thread hat seine eigenen 1000 Integers
        stuff[0] = socket(...); // neuen Socket anlegen, jeder Thread bekommt eigene Sockets
    }
    

    Statische bzw. globale Variablen gibt es allerdings nur 1x:

    int g_stuff[1000]; // <- alle Threads verwenden die selben 1000 Integers
    void Foo()
    {
        // schwieriger zu verwenden, da man Zugriffe auf g_stuff von den verschiedenen aus Threads synchronisieren muss
    }
    

    Und was Sockets angeht: ein SOCKET ist eine Art Handle. Also einfach eine Zahl, die für ein abstraktes Objekt vom Typ Socket steht.
    Wenn du in beiden Threads die selbe Zahl verwendest, dann wird auch in beiden Threads der selbe Socket angesprochen.

    Ob du die selbe Zahl in unterschiedlichen Variablen stehen hast, oder ob auch die Variable in den verschiedenen Threads die selbe ist, spielt dabei keine Rolle.

    Nur wenn du unterschiedlichen Variablen stehen hast, und diese auch mit unterschiedlichen Socket Handles befüllst (z.B. indem du in der Thread-Funktion direkt socket() aufrufst um neue Socket Handles zu erzeugen) -- nur dann sind es zwei verschiedenen, unabhängige Sockets.
    Und nur dann musst/kannst du sie unabhängig voneinander verwenden (connecten, senden, empfangen etc.).



  • Was soll denn ThreadSocksxy für eine Funktion sein?

    Selbst Google findet nur deinen thread dafür.


Anmelden zum Antworten