Post

unix Stream Sock

unix Stream Sock

unix Sock

unixSock是在一台主机的不同进程之间进行通信的socket。虽然本机的通信可以通过lo网卡进行,但是涉及的结构还是比较复杂,因为没有必要经过网络协议栈,只是本机通信的话。因此unix sock就此诞生。

unix Stream Sock

unix Stream Sock类似与网络sock中的tcp sock。unix Stream Sock是全双工的,通信流程和tcp sock基本一致。先调用socket()创建一个socket文件描述符, address family指定为AF_UNIX, type选择SOCK_STREAM, protocol指定为None(0)。

注意Unix Domain Socket的地址是一个socket类型的文件在文件系统中的路径,这个socket文件通过bind()创建。所以在创建好socket之后就需要使用bind进行绑定。所以bind绑定的其实是某个inode。

socket创建成功后应该会在内核中创建读写缓冲区。

通信流程

服务端

  • 创建socket: socket()
  • 绑定本地地址: bind()
  • 监听客户端待连接地址: listen()
  • 同意客户端请求,获得新连接:accept()
  • 开始读写通信: send(), recv()
  • 关闭文件描述符:shutdown()

客户端

  • 创建socket:socket()
  • 调用bind绑定自己的本地地址(注意客户端不强制bind,服务端可以不了解连接来源)
  • 向服务端请求连接:connect()
  • 开始读写通信: send(), recv()
  • 关闭文件描述符:shutdown()
This post is licensed under CC BY 4.0 by the author.