11.1.2 套接字函数
UNIX域的套接字函数和以太网套接字(AF_INET)的函数相同,但是当用于UNIX域套接字时,套接字函数有一些差别和限制,主要有如下几条。
q 使用函数bind()进行套接字和地址的绑定的时候,地址结构中的路径名和路径名所表示的文件的默认访问权限为0777,即用户、用户所属的组和其他组的用户都能读、写和执行。
q 结构sum_path中的路径名必须是一个绝对路径,不能是相对路径。
q 函数connect()使用的路径名必须是一个绑定在某个已打开的UNIX域套接字上的路径名,而且套接字的类型也必须一致。下列情况将出错:(a)该路径名存在但不是一个套接字;(b)路径名存在且是一个套接口,但没有与该路径名相关联的打开的描述字;(c)路径名存在且是一个打开的套接字,但类型不符。
q 用函数connect()连接UNIX域套接字时的权限检查和用函数open()以只写方式访问路径名完全相同。
q UNIX域字节流套接字和TCP套接字类似:它们都为进程提供一个没有记录边界的字节流接口。
q 如果UNIX域字节流套接字的connect()函数发现监听套接字的队列已满,会立刻返回一个ECONNREFUSED错误。这和TCP有所不同:如果监听套接字的队列已满,它将忽略到来的SYN,TCP连接的发起方会接着发送几次SYN重试。
q UNIX域数据报套接字和UDP套接字类似:它们都提供一个保留记录边界的不可靠的数据服务。
q 与UDP套接字不同的是,在未绑定的UNIX域套接字上发送数据报不会给它捆绑一个路径名。这意味着,数据报发送者除非绑定一个路径名,否则接收者无法发回应答数据报。同样,与TCP和UDP不同的是,给UNIX域数据报套接字调用connect()不会捆绑一个路径名。