Linux initiert lokalen Socket mit '@'

Linux initiert lokalen Socket mit '@'

Ich habe Erfahrung mit der Verwendung von lokalen benannten und Netzwerk-Sockets in C, aber unter Linux (Fedora 14) stelle ich bei Verwendung des GNOME-Systemmonitors fest, dass ein lokaler Socket, der vom initProzess verwendet wird, den Pfad hat "@/com/ubuntu/upstart". Mir fällt auf, dass dieser Pfad (ohne das „@“) nicht existiert, aber ich habe auch keine Ahnung, was das „@“ bedeutet. Ich habe das nirgendwo sonst gesehen.

Einige Recherchen haben ergeben, dass der initDaemon „Upstart“ eine relativ neue Einführung in Linux ist und vermutlich einen anderen älteren Daemon ersetzt. Er wird auf einer Subdomain der Ubuntu-Website gehostet, daher spüre ich in dieser Hinsicht eine Verbindung, aber was bedeutet das „@“? Und warum folgt ihm ein nicht vorhandener Pfad?

Danke

Antwort1

Was Sie sehen, ist einabstrakte Steckdose, ein spezieller Socket-Typ, der nur für Linux gilt.Mann 7 Unix:

   *  abstract: an abstract socket address is distinguished by the fact that
      sun_path[0] is a null byte ('\0').  The socket's address in this namespace
      is given by the additional bytes in sun_path that are covered by the
      specified length of the address structure.  (Null bytes in the name have no
      special significance.)  The name has no connection with file system
      pathnames.  When the address of an abstract socket is returned by
      getsockname(2), getpeername(2), and accept(2), the returned addrlen is
      greater than sizeof(sa_family_t) (i.e., greater than 2), and the name of
      the socket is contained in the first (addrlen - sizeof(sa_family_t)) bytes
      of sun_path.  The abstract socket namespace is a nonportable Linux
      extension.

Obwohl dies nicht erwähnt wird, werden abstrakte Socket-Namen mit dem ersten Zeichen @ anstelle des Null-Bytes gedruckt, wie es in bind() usw. verwendet wird.

Wie in der Manpage erwähnt, ist die Zeichenfolge nach dem @ oder dem Nullbyte kein Dateisystempfad und kann alles sein. In Ihrem Fall ist es aus organisatorischen Gründen (um Konflikte mit anderen abstrakten Sockets zu vermeiden) als Pfad strukturiert.

verwandte Informationen