Frage zu Socketoperation



  • Hi,

    ich rätsel etwas über zwei programme in einer client-server beziehung. Die Programme arbeiten beide auf dem selben Host, sind also lokal, weswegen der Socket als AF_UNIX erstellt wird.

    Ich bin etwas darüber verwirrt, wie der Client diesen UNIX-Socket verwendet.

    1. ) Er öffnet einen fd mit einer sockaddr_un Struktur und connected (ok)
    2. ) Nun, wird ein neuer fd erstellt und wie folgt mit bind() gebunden:

    //Prepare local_addr 
      name.zero = 0;
      name.pid = getpid();
      gettimeofday(&tv, NULL);
      name.usecs = tv.tv_usec;
    
      local_addr.sun_family = AF_UNIX;
      memcpy(&local_addr.sun_path, &name, sizeof(name));
    
      //Bind local
      if (bind(uml_fd, (struct sockaddr *) &local_addr, sizeof(local_addr)) < 0) 
      {
        perror("Error binding");
        exit(1);
      }
    

    Hier kommt mein Verständnisproblem, was genau wird hier gemacht? Welchen Sinn hat es, sich mit der lokalen Adresse hier zu binden?



  • Du musst doch irgendwie auf den socket zugreifen können. Wie soll das gehen ohne den socket zu binden? Durch das Binden gibt man dem socket praktsich einen Namen damit andere sich damit verbinden können



  • Ya, aber wo wird der Socket erstellt, diese structur die als sockaddr_un übergeben wird, enthält doch fast nur "Schrott", oder seh ich ds jetzt gänzlich falsch?

    Inhalt "AF_UNIX,0 4711 111111", das ist doch kei gültiger Pfad, oder? Der Bind aufruf als solche ist mir klr, nur wohin er gebunden wird und warum das funktioniert, nicht.



  • Wenn du einen Local-Bind von Client-UnixDomainSockets machst, ist der Server beim accept() in der Lage, auf die Daten in sun_path wieder zuzugreifen.

    Lies mal man 7 unix.

    Was hier gemacht wird, ist eine "abstract socket address".


Log in to reply