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

  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. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值