标签: socket

可以从套接字写入/读取的数据大小

我想知道是否有一种简单的方法可以找到 Linux 套接字支持的最大大小?(这是可配置的吗?如果是,在哪里?)

例如,网络上的大多数套接字示例都发送“Hello Socket”或其他一些小字符串,但是如果我将整个战争与和平放入套接字中,它何时会中断?

由于一切都是一个文件,它是最大文件大小吗?socket连接不同的文件系统时如何协调?

我对流套接字最感兴趣。

linux files socket

5
推荐指数
2
解决办法
1万
查看次数

Linux 上的跨进程复制

我想复制一个在 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 file-descriptors socket

5
推荐指数
2
解决办法
3845
查看次数

寻址到 Linux 系统自己的接口之一的流量是否会离开系统?

我有两台独立的服务器在 Linux 系统的同一端口上运行,一台绑定到环回接口,另一个绑定到公共以太网接口。如果我将该系统上的客户端连接到公共套接字,系统是否足够智能以保持自身内部的流量?

linux networking socket

5
推荐指数
1
解决办法
289
查看次数

gnome-shell 连续读取哪个套接字?

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)

file-descriptors gnome-shell gnome3 socket

5
推荐指数
0
解决办法
855
查看次数

套接字连接到绑定到 IP 与本地主机的端口

我的理解是,使用 localhost 绑定到端口的套接字对子网不可见,因为绑定不是使用 nic IP 地址。连接到此类端口的本地进程将创建一个 unix 管道而不是 IP 套接字。但是,如果绑定到 nic IP 地址,则该端口对子网可见。我想了解在连接到绑定到 localhost 和 nic IP 的端口时建立的连接类型。

** 绑定到本地主机的端口 **

  • 使用 localhost 的本地进程连接创建一个 unix 管道
  • 使用 nic IP 的本地进程连接创建一个 unix 管道
  • 使用 nic IP 连接的外部进程无法连接

** 绑定到网卡 IP 的端口 **

  • 使用 localhost 的本地进程连接创建一个 unix 管道
  • 使用 nic IP 的本地进程连接创建一个 IP 套接字
  • 使用 nic IP 连接的外部进程连接并创建一个 IP 套接字

以上说法正确吗?我正在审查这个站点的网络编程:

http://beej.us/guide/bgipc/output/html/multipage/unixsock.html

希望有更多的见识。

bind socket

5
推荐指数
1
解决办法
7563
查看次数

使用 socat 从 Unix 域套接字脚本写入然后读取

我有一个简单的服务器侦听 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 立即返回。

linux pipe socket

5
推荐指数
1
解决办法
1350
查看次数

时间同步,使用NTP还是只是套接字?

我正在使用 PC 和树莓派(都运行 Linux)来收集传感器数据,树莓派收集激光扫描数据,PC 收集相机捕获的图像。我必须同步这两台机器的时间。我希望它们之间的时间差可以小于1ms

我直接用网络连接它们,所以我不能使用一些众所周知的 NTP 服务器。我在树莓派上 ping PC,ping 时间小于0.6ms。我想出了两个想法:

  1. 将PC视为NTP服务器,树莓派从中同步时间。
  2. 在它们之间创建一个socket连接,树莓派只是在连接建立的时候把它的时间戳发送给PC,这样我们就可以知道两台机器的时间差。

哪个是更好的主意?或者你有什么更好的想法?如何计算两台机器之间的实际时间差?我可以将时差限制为 1 毫秒吗?

ping time ntp socket

5
推荐指数
1
解决办法
783
查看次数

root 无法连接到其他用户的符号链接套接字

我使用 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)

ssh su symlink socket

5
推荐指数
1
解决办法
1010
查看次数

增加 igmp_max_memberships 的影响

我正在编写一个将订阅 150 多个多播组的应用程序。看来 linux 默认的多播订阅数是 20,可以通过增加

sysctl -w net.ipv4.igmp_max_memberships=new_limit

任何人都对增加这一点并通过一个套接字订阅多个 mcast 组的任何性能影响有任何经验?最好将订阅拆分到多个套接字上吗?如果是这样,为什么?

multicast socket

5
推荐指数
0
解决办法
724
查看次数

有没有办法在不遍历 /proc/ 中的所有进程的情况下识别套接字的 PID(或 cgroup)

我需要确定给定套接字的进程的 cgroup。具体来说,我在使用 tcp 调用我的进程的同一台机器上有一个进程,我需要识别该进程或其 cgroup。tcp 要求是因为我正在模拟第三方 API。我需要根据调用我的进程返回不同的数据。一种解决方案是使用 /proc/net/tcp 确定套接字,我可以从中获取套接字的 inode,然后遍历 /proc/*/fd 以找到列出的 inode。没有这种迭代,是否有直接的方法可以从(我假设是 sockfs)inode 映射到其 PID?

inode cgroups socket

5
推荐指数
1
解决办法
6276
查看次数

标签 统计

socket ×10

linux ×4

file-descriptors ×2

bind ×1

cgroups ×1

files ×1

gnome-shell ×1

gnome3 ×1

inode ×1

multicast ×1

networking ×1

ntp ×1

ping ×1

pipe ×1

ssh ×1

su ×1

symlink ×1

time ×1