本文参考communicate with unix sockets做了一些简单的测试,了解unix socket是如何通信的。
创建一个tcp socket
创建一个unix socket,命令不会返回,会一直等待:
# nc -U /tmp/demo.sock -l
## nc, which is short for netcat.
##-l listen
## -U, --unixsock Use Unix domain sockets only
## --vsock Use vsock sockets only
第二个终端查看这个socket的类型是STREAM,以及它的状态是listen。关于tcp和udp的socket的区别,不同于网络里面的tcp和udp,参考difference-between-unix-domain-stream-and-datagram-sockets。
# lsof /tmp/demo.sock
##the lsof command is a utility used to list and give information about files that are in use by processes.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 644501 root 3u unix 0xffff9b20795e2200 0t0 6951183 /tmp/demo.sock type=STREAM (LISTEN)
第二个终端用nc与这个socket通信:
# nc -U /tmp/demo.sock
test
这两个终端就会像管道一样,一端写另一端会同步显示,两边的内容总是一样的,都可以写,都可以收到。此时,第三个终端查看现在的状态已经是connected:
# lsof /tmp/demo.sock
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 644501 root 4u unix 0xffff9b20791eee80 0t0 6951184 /tmp/demo.sock type=STREAM (CONNECTED)
创建一个udp的socket:
# nc -U /tmp/demo.socku -u -l
## -u代表udp
第二个终端查看,是DGRAM类型的,状态是unconnected:
# lsof /tmp/demo.socku
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 36400 root 3u unix 0xffff9441bcb54c80 0t0 3613087 /tmp/demo.socku type=DGRAM (UNCONNECTED)
第二个终端,使用这个socket开始传输一些数据,跟tcp的一样。
第三个终端,查看socket状态是connected
# lsof /tmp/demo.socku
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 644563 root 3u unix 0xffff9b2068958cc0 0t0 6951191 /tmp/demo.socku type=DGRAM (CONNECTED)
当server 端kill以后,继续输入内容,tcp:
# nc -U /tmp/demo.sock
test
you
sdfsdfsdf
sdfsdf
Ncat: Broken pipe.
当server端kill以后,继续输入内容,udp:
# nc -u /tmp/demo.socku -U
ste
sdf
Ncat: Connection refused.
标签:tmp,nc,socket,demo,testing,sock,unix,Unix
From: https://blog.51cto.com/u_15288977/5901834