例如,如果您关闭一个管道或套接字,该管道或套接字的写入缓冲区中仍有尚未被另一端进程读取的数据,那么 close() 是否会阻塞,直到读取数据或其他进程死亡?
netstat -a报告Recv-Q(等待读取应用程序的未读数据量)AF_INET,但不是AF_UNIX套接字(至少不是SOCK_DGRAM)。
有人知道AF_UNIX从进程本身外部获取套接字信息的方法吗?
除非报告数量,否则有没有办法判断是否有任何未读数据等待应用程序。
如果我没有使用 lsof 的权限,如何获取 pid 已知的进程?谢谢
我知道netstat -l -p命令打印出活动的 unix 域套接字,但它似乎没有更新?关闭套接字后,它仍然显示在 netstat 命令结果中。
由给定打开的 UNIX 域套接字作为 的符号链接$PID列出。我知道它是该套接字的标识符,但它到底是什么?它是 inode 吗?它到底是一个索引节点吗?/proc/$PID/fd/X[socket:ID]sockfs
# stat /proc/15474/fd/18
File: /proc/15474/fd/18 -> socket:[100754490]
Size: 64 Blocks: 0 IO Block: 1024 symbolic link
Device: 4h/4d Inode: 100753577 Links: 1
Access: (0700/lrwx------) Uid: ( 999/mysql) Gid: ( 999/ docker)
Access: 2020-08-14 10:08:09.834593933 +0200
Modify: 2020-08-14 10:08:07.842537799 +0200
Change: 2020-08-14 10:08:07.842537799 +0200
Run Code Online (Sandbox Code Playgroud) 我通过 SSH 连接到虚拟机并寻找/proc/<pid>/net/tcp我的 zsh shell。我看到这条线
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
...
3: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 19127 1 0000000000000000 100 0 0 10 0
Run Code Online (Sandbox Code Playgroud)
除非我误解了这句话的意思,否则 zsh 正在侦听端口 22。我知道 zsh 进程是运行 sshd 的进程的后代,但 sshd 在分叉后不会关闭侦听套接字吗?
我编写了一个简单的 Perl 服务器,它侦听 TCP 端口/套接字并接受连接。现在我想知道:
当想要实现基于地址的访问控制时,是否可以在接受连接之前检查请求连接的对等方的地址?
如果可能的话,我可以拒绝连接请求(我希望),而不是接受连接并立即再次关闭它。
我通过发出命令在我自己的 C++ 程序中使用 rsync system("rsync -rauzvq root@host:/folder");
我用它来保持多个系统同步。
现在我遇到的问题是,当远程主机关闭并且它仍在与我的程序进行 rsync-ing 时,我的程序在 TCP 超时期间挂起。所以我想,我会调整 rsync 套接字的 TCP 超时参数,但我不知道如何(--sockopts 不起作用)。
解决此问题的另一种方法是进行分叉系统调用并检查 rsync pID 在特定超时后是否仍然存在,否则将其杀死。唯一的缺点是我无法检查进程是真正同步还是只是挂在 TCP 超时上?
那么,你们会尝试什么?
当我tmux从两台不同的计算机登录到会话时,我希望能够跟踪两个tmux会话的套接字上待处理的数据量。为了测试这一点,我登录到计算机A和计算机B,然后从计算机上B使用 ssh 登录到计算机A。我从每个控制台附加到同一个tmux会话并开始运行一个脚本,该脚本打印从 1 到 100M 的迭代次数。事实上,我发现本地 ( ) 控制台中打印的迭代次数A大于远程控制台 ( B) 中打印的迭代次数,因为消息传输到远程计算机需要时间
[user@server00 ~]$ lsof | grep tmux | grep unix
tmux 1073 user 4u unix 0xf6dc2ac0 0t0 18681 socket
tmux 1073 user 5u unix 0xf6dc3840 0t0 18682 socket
tmux 1073 user 6u unix 0xf137ed00 0t0 19768 socket
tmux 1073 user 7u unix 0xf6dc2880 0t0 18683 /tmp/tmux-1000/default
tmux 1073 user 8u unix …Run Code Online (Sandbox Code Playgroud) 我说得对吗
当两个进程通过网络套接字通信时,每个进程创建一个套接字(每个套接字属于一个进程),进程通过它们的套接字进行通信。
当两个进程通过Unix域套接字通信时,只创建一个套接字(不属于任何进程),并且两个进程都连接到同一个套接字?
Linux 内核为绑定到路径名的 Unix 域套接字创建一个文件。
Linux 内核是否为 Internet 域套接字创建文件?