交付:一个关得干净的服务

交付:一个关得干净的服务

场景:要交付一个 TCP 服务和它的启动脚本,端口在说明里。 任务:写 ~/服务/答.py(bind 前设 SO_REUSEADDR;一个客户端一个客户端地接;每行 ping 回 pong、bye 回

阅读更多 →
重启报端口占用

重启报端口占用

场景:~/服务/答.py 收到 bye 就先 close 客户端(服务端先关)。同事刚停掉它想重启,一起就报 [Errno 98] Address already in use,可 ss -tln 上

阅读更多 →
把 CLOSE-WAIT 修掉

把 CLOSE-WAIT 修掉

场景:~/服务/答.py 在后台跑着(端口在说明里),它 accept 之后把套接字存进列表、对方断开也从不 close,ss 上攒了一堆 CLOSE-WAIT。 任务:改 答.py:recv 交回空

阅读更多 →
攒了多少 CLOSE-WAIT

攒了多少 CLOSE-WAIT

场景:本机某端口上的服务写得有毛病:客户端断开之后它从不 close 自己那一头。后台已经有几个客户端连过又断了。对照表列了八个数。 任务:用 ss -tan 数出这个端口上(Local Addres

阅读更多 →
发了多少字节

发了多少字节

场景:本机某端口上的服务和一个客户端之间有一条连接,服务端往上面发了一些字节,客户端连着不放、一个字节也没读。对照表列了八个数。 任务:用 ss -tani(-i 显示每条连接的内部信息)找出服务端在

阅读更多 →
谁在 TIME-WAIT

谁在 TIME-WAIT

场景:~/演示.py 在本机起一个服务、再用一个客户端连上去说一句话,然后其中一头先关。两头的端口都是固定的(写在脚本里)。对照表列了八个端口号。 任务:运行 python3 ~/演示.py,然后一分

阅读更多 →
关了一半的连接

关了一半的连接

场景:本机某端口上的服务和一个客户端之间有一条连接,其中一头关了自己的写方向、另一头什么都没关。对照表列了八个状态名。 任务:用 ss -tan 找出这条连接服务端那一头(Local Address

阅读更多 →
握手完了没人接

握手完了没人接

场景:本机某端口上有一个服务,它 listen 之后就再也没调 accept。后台有几个客户端连了上去。对照表列了八个数。 任务:用 ss -tln 看这个端口那一行的 Recv-Q——握手已经完成、

阅读更多 →
四种状态各是什么

四种状态各是什么

把四种现象和 ss 里的状态配对,按线索顺序打印状态名: state = { "对方关了,我这边还没 close": "CLOSE-WAIT",

阅读更多 →
谁会进 TIME-WAIT

谁会进 TIME-WAIT

真机上一条连接关掉之后,进 TIME-WAIT 的是【0】。

阅读更多 →