但是,是否还有其他聪明的工具/方法可以查看在TCP端口上侦听的进程是否收到消息?
您可以使用strace
与-e trace=network
。这是在接受TCP连接,接收HTTP请求,发送HTTP响应并关闭连接时显示的内容:
$ strace -v -f -e trace=network -p `cat logs/my_server.pid`
Process 2361 attached with 44 threads - interrupt to quit
[pid 2422] accept(11, {sa_family=AF_INET, sin_port=htons(56289), sin_addr=inet_addr("172.30.1.60")}, [16]) = 14
[pid 2422] getsockname(14, {sa_family=AF_INET, sin_port=htons(7754), sin_addr=inet_addr("172.30.1.60")}, [16]) = 0
[pid 2422] setsockopt(14, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 2422] setsockopt(14, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 2422] getsockopt(14, SOL_SOCKET, SO_OOBINLINE, [515004615020773376], [4]) = 0
[pid 2388] recvfrom(14, "GET /OPEN_", 10, MSG_PEEK, NULL, NULL) = 10
[pid 2388] recvfrom(14, "GET /OPEN_SESSION?LOGIN=HAS_ADMI"..., 4096, 0, NULL, NULL) = 246
[pid 2388] sendto(14, "HTTP/1.1 200 OK\r\nServer: MY_SER"..., 192, 0, NULL, 0) = 192
[pid 2388] sendto(14, "<?xml version='1.0' encoding = '"..., 680, 0, NULL, 0) = 680
[pid 2361] --- SIGIO (I/O possible) @ 0 (0) ---
[pid 2388] recvfrom(14, "", 4096, 0, NULL, NULL) = 0
[pid 2388] shutdown(14, 2 /* send and receive */) = 0
strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -
。