0
点赞
收藏
分享

微信扫一扫

Learn by testing: Unix socket 如何通信?

颜娘娘的碎碎念 2022-12-01 阅读 105

本文参考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.
举报

相关推荐

0 条评论