我想知道是否有一种简单的方法可以找到 Linux 套接字支持的最大大小?(这是可配置的吗?如果是,在哪里?)
例如,网络上的大多数套接字示例都发送“Hello Socket”或其他一些小字符串,但是如果我将整个战争与和平放入套接字中,它何时会中断?
由于一切都是一个文件,它是最大文件大小吗?socket连接不同的文件系统时如何协调?
我对流套接字最感兴趣。
我想复制一个在 Linux 上无关进程中运行的文件描述符。我知道sendmsg(2)和SCM_RIGHTS(例如/sf/ask/314260341/),但只有在另一个进程是合作。我需要一个不需要其他进程积极合作的解决方案。我也知道我可以先创建文件描述符,保留一个副本,然后创建另一个进程,但我需要一个解决方案,其中另一个进程创建自己的文件描述符。
我可以看到文件描述符:
$ ls -l /proc/13115/fd/3
lrwx------ 1 pts pts 64 2013-05-04 13:15 /proc/13115/fd/3 -> socket:[19445454]
Run Code Online (Sandbox Code Playgroud)
但是,open("/proc/13115/fd/3", O_RDWR)在另一个进程中执行返回错误No such device or address。还有其他可行的方法吗?可能与ptrace?
我有两台独立的服务器在 Linux 系统的同一端口上运行,一台绑定到环回接口,另一个绑定到公共以太网接口。如果我将该系统上的客户端连接到公共套接字,系统是否足够智能以保持自身内部的流量?
strace 显示 GNOME shell 不断尝试从套接字读取,这通常不可用(或不包含任何要读取的数据):
strace -p gnome-shell-pid -e trace=recvfrom
recvfrom(6, 0x1390a84, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(6, 0x1390a84, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(6, "\1\233t\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\3304\351\244\307\202\36", 4096, 0, NULL, NULL) = 32
recvfrom(6, 0x1390a84, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(6, 0x1390a84, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(6, 0x1390a84, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(6, 0x1390a84, …Run Code Online (Sandbox Code Playgroud) 我的理解是,使用 localhost 绑定到端口的套接字对子网不可见,因为绑定不是使用 nic IP 地址。连接到此类端口的本地进程将创建一个 unix 管道而不是 IP 套接字。但是,如果绑定到 nic IP 地址,则该端口对子网可见。我想了解在连接到绑定到 localhost 和 nic IP 的端口时建立的连接类型。
** 绑定到本地主机的端口 **
** 绑定到网卡 IP 的端口 **
以上说法正确吗?我正在审查这个站点的网络编程:
http://beej.us/guide/bgipc/output/html/multipage/unixsock.html
希望有更多的见识。
我有一个简单的服务器侦听 Unix 域套接字(在 CentOS 机器上,以防万一)。当我向套接字发送命令“DATE”时,它会写回一条欢迎消息,然后是“2015 年 4 月 15 日”。我可以使用以下命令手动执行此操作:
socat - UNIX-CONNECT:/tmp/server.sock
Run Code Online (Sandbox Code Playgroud)
但我现在想编写脚本。我可以通过将 echo 的输出通过管道传输到上面来将我的 DATE 命令发送到套接字,但是 socat 只返回欢迎消息。我不确定 socat 是否只返回前 2 行,或者在关闭套接字之前等待一段安静的时间,或者什么。例如:
echo "DATE" | socat - UNIX-CONNECT:/tmp/server.sock
Run Code Online (Sandbox Code Playgroud)
如何在断开连接之前让 socat 捕获整个响应?我试过 -t 和 -T 参数让它等待 5 秒,但这没有效果,socat 立即返回。
我正在使用 PC 和树莓派(都运行 Linux)来收集传感器数据,树莓派收集激光扫描数据,PC 收集相机捕获的图像。我必须同步这两台机器的时间。我希望它们之间的时间差可以小于1ms。
我直接用网络连接它们,所以我不能使用一些众所周知的 NTP 服务器。我在树莓派上 ping PC,ping 时间小于0.6ms。我想出了两个想法:
哪个是更好的主意?或者你有什么更好的想法?如何计算两台机器之间的实际时间差?我可以将时差限制为 1 毫秒吗?
我使用 oh-my-zsh 的 ssh-agent 插件为我的当前SSH_AUTH_SOCK创建创建一个静态符号链接。在启用代理转发的情况下通过 SSH 连接时,文件/tmp/ssh-agent-$USER-screen被符号链接到/tmp/ssh-<whatever>/agent.<some numbers>:
agross@router ~
$ ls -la /tmp/ssh-agent*
lrwxrwxrwx. 1 agross agross 30 Jan 7 21:35 /tmp/ssh-agent-agross-screen -> /tmp/ssh-uoof1WiDSw/agent.7745
agross@router ~
$ ls -la /tmp/ssh-uoof1WiDSw/
srwxr-xr-x. 1 agross agross 0 Jan 7 21:35 agent.7745
Run Code Online (Sandbox Code Playgroud)
我成功地测试了符号链接ssh-add -l:
agross@router ~
$ ssh-add -l
2048 15:5a:dd... /home/agross/.ssh/id_rsa (RSA)
agross@router ~
$ echo $SSH_AUTH_SOCK
/tmp/ssh-agent-agross-screen
Run Code Online (Sandbox Code Playgroud)
一旦su我无法再访问符号链接,但符号链接目标工作正常。
[root@router ~]# socat -v - UNIX-CONNECT:/tmp/ssh-agent-agross-screen
2016/01/07 21:51:04 socat[16054] E connect(3, AF=1 …Run Code Online (Sandbox Code Playgroud) 我正在编写一个将订阅 150 多个多播组的应用程序。看来 linux 默认的多播订阅数是 20,可以通过增加
sysctl -w net.ipv4.igmp_max_memberships=new_limit
任何人都对增加这一点并通过一个套接字订阅多个 mcast 组的任何性能影响有任何经验?最好将订阅拆分到多个套接字上吗?如果是这样,为什么?
我需要确定给定套接字的进程的 cgroup。具体来说,我在使用 tcp 调用我的进程的同一台机器上有一个进程,我需要识别该进程或其 cgroup。tcp 要求是因为我正在模拟第三方 API。我需要根据调用我的进程返回不同的数据。一种解决方案是使用 /proc/net/tcp 确定套接字,我可以从中获取套接字的 inode,然后遍历 /proc/*/fd 以找到列出的 inode。没有这种迭代,是否有直接的方法可以从(我假设是 sockfs)inode 映射到其 PID?