您的位置:首页 > 大数据 > 人工智能

June 29th Friday (六月 二十九日 金曜日)

2007-07-14 11:46 411 查看
  The Unix domain protocols are not an actual protocol suite, but a way of performing
client/server communication on a single host using the same API that is used for clients
and servers on different hosts. The Unix domain protocols are an alternative to the
interprocess communication (IPC) methods, when the client and server are on the same host.

  Two types of sockets are provided in the Unix domain: stream sockets (similar to TCP)
and datagram sockets (similar to UDP). Even though a raw socket is also provided, its
semantics have never been documented, it is not used by any program that the authors are
aware of, and it is not defined by POSIX.

struct sockaddr_un {
  sa_family_t sun_family;     /* AF_LOCAL */
  char        sun_path[104];  /* null-terminated pathname */
};

  The POSIX specification does not define the length of the sun_path array and it specifically
warns that applications should not assume a particular length. Use the sizeof operator to find
the length at run-time and to verify that a pathname fits into the array. The length is likely
to be between 92 and 108 rather than a larger value big enough to hold any pathname. The reason
for these limits is an implementation artifact dating back to 4.2BSD requiring that this structure
fit in a 128-byte mbuf (a kernel memory buffer).

  The pathname stored in the sun_path array must be null-terminated. The macro SUN_LEN is provided
and it takes a pointer to a sockaddr_un structure and returns the length of the structure, including
the number of non-null bytes in the pathname. The unspecified address is indicated by a null string
as the pathname, that is, a structure with sun_path[0] equal to 0. This is the Unix domain equivalent
of the IPv4 INADDR_ANY constant and the IPv6 IN6ADDR_ANY_INIT constant.

  POSIX renames the Unix domain protocols as "local IPC," to remove the dependence on the Unix OS.
The historical constant AF_UNIX becomes AF_LOCAL. Nevertheless, we still use the term "Unix domain"
as that has become its de facto name, regardless of the underlying OS. Also, even with POSIX attempting
to make these OS-independent, the socket address structure still retains the _un suffix!

  Notice: the file path used to communicate must be created by receiver using bind().  The sender can not
invoke unlink() delete the path.  It will cause sendto() or recvfrom() errors. 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息