问题标签 [unix-socket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
40203 浏览

c - unix域套接字VS命名管道?

在查看了一个名为 socket 的 unix 之后,我认为它们是命名管道。我查看了名称管道,并没有看到太大的区别。我看到它们的初始化方式不同,但这是我唯一注意到的。两者都使用 C 写/读功能,工作方式与 AFAIK 相似。

unix域套接字和命名管道有什么区别?我什么时候会选择一个而不是另一个?我应该默认使用哪个(比如我在 C++ 中默认使用向量而不是使用双端队列、列表或其他任何我需要的东西)?

0 投票
1 回答
30853 浏览

linux - Unix 域套接字如何区分多个客户端?

TCP 具有元组对(IP 地址/端口/类型)来告诉一个客户端与另一个客户端。UDP 传递客户端 IP 和端口。unix 域如何跟踪不同的客户端?

换句话说,服务器创建一个绑定到某个路径的套接字,比如 /tmp/socket。2 个或更多客户端连接到 /tmp/socket。下面发生了什么来跟踪来自 client1 和 client2 的数据?我想网络堆栈在域套接字中没有任何作用,那么内核是否在这里完成了所有工作?

是否有像 IP 协议格式和 TCP/UDP 格式一样的 unix 域协议格式?域套接字数据报协议的格式是否在某处发布?每个unix都是不同的还是POSIX之类的东西标准化了它?

感谢您的任何照明。我找不到任何解释这一点的信息。每个来源都只是掩饰了如何使用域套接字。

0 投票
6 回答
815 浏览

ruby-on-rails - Rails 和 Ruby EventMachine 进程之间的通信

我有一个 Rails 应用程序,它需要从运行 EventMachine 的本地运行进程请求数据。实现此请求/响应的最佳方式是什么?

0 投票
2 回答
343 浏览

php - socket_read() 中 $type 参数的含义

我尝试使用 PHP 套接字创建从 ac# 应用程序到 PHP 5.3 脚本的 tcp/ip 套接字连接。c# 应用程序应将 JSON 字符串发送到 PHP 脚本。

我关于socket_read 手册的问题:它们是什么意思:

PHP_BINARY_READ 究竟是什么,为什么在使用这个参数时我应该使用 recv() 函数?

非常感谢任何帮助。

0 投票
2 回答
5939 浏览

linux - 有没有办法获取unix套接字连接另一端的uid

有没有办法让 UNIX 域套接字侦听器只接受来自某个用户的连接(chmod/chown不适用于抽象套接字 afaik),或者换句话说,获取传入连接的 uid(在 Linux 上)?

Dbus 在 Linux 上使用抽象的 unix 套接字,有一个函数GetConnectionUnixUser被 polkit 用来确定调用者。所以我想dbus-daemon必须有办法做到这一点。有谁知道它是如何工作的?

0 投票
1 回答
391 浏览

npapi - Unix 域套接字和 NPAPI

我正在寻找源代码或库以通过 NPAPI 将 Unix 域套接字公开给我的 Google Chrome 扩展。

是否已经存在类似或相关的东西?

0 投票
2 回答
7769 浏览

linux - SO_PEERCRED vs SCM_CREDENTIALS - 为什么两者都有?

SO_PEERCRED 是获取连接的 AF_UNIX 流套接字的 pid/uid/gid 的简单方法,SCM_CREDENTIALS 或多或少相同,但更复杂(各种辅助消息)。显示两种方式的示例链接

  1. 为什么有两种方法可以获取或多或少相同的信息?
  2. 为什么更舒适的 SO_PEERCRED 没有在 unix(7) 联机帮助页中列出?
  3. 哪个在实际应用中使用得更多?

我应该使用什么?

0 投票
1 回答
171 浏览

python - Twistd 套接字所有权

我有一个守护进程,它监听/var/run. 我使用 init 脚本(显然是 root)启动守护进程,并且我正在使用twistd --uidand--gid选项将权限授予非特权用户。但是,该套接字仍归root:root.

第二个守护进程,作为同一个非特权用户运行,需要访问套接字。我现在将套接字所有权更改为daemon:daemoninit 脚本,但这并没有让我觉得这是一个非常优雅的解决方案。

daemon:daemon有没有办法让文件中拥有的套接字tac

0 投票
1 回答
1297 浏览

c - Unix域套接字(C)-客户端在connect()上“删除”套接字?

简明扼要地列举这可能有点困难,但我会尽我所能对领域和问题的新手理解。

我有 2 个进程,一个首先取消链接、创建套接字描述符、绑定、侦听和接受本地 unix 套接字的流服务器。服务器的工作是接受连接,发送任意数据,也接收任意数据。除了初始设置外,客户端进程的工作与服务器相同;创建一个套接字描述符,并连接到 unix 套接字。

启动服务器后,我可以验证正在创建 unix 套接字。启动客户端后,我收到一条connect()错误消息,指出文件或目录不存在或无效。是的,尝试像以前一样定位unix套接字,文件不再存在......

有谁知道导致这种行为的错误的原因或位置?

如果代码片段有助于澄清,我当然也可以发布这些。

可能还值得注意的是,我正在使用修改后的版本getaddrinfo来专门填充addrinfo structunix 域。

0 投票
2 回答
11605 浏览

java - Unix域套接字上的Broken Pipe的原因是什么?

我有一个服务器应用程序,它接收请求并在 Unix 域套接字上转发它们。这在合理的使用情况下非常有效,但是当我对几千个请求进行一些负载测试时,我收到了 Broken Pipe 错误。

我正在使用带有junixsocket的 Java 7来发送请求。我有很多并发请求,但我有一个由 20 个工作人员组成的线程池,它们正在写入 unix 域套接字,因此不存在并发打开连接过多的问题。

对于每个请求,我打开、发送和关闭与 Unix 域套接字的连接。

可能导致 Unix 域套接字上的管道损坏的原因是什么?

更新:

如果需要,放置代码示例:

我有一个由 20 个工作人员组成的线程池,他们同时执行上述操作(因此最多 20 个并发连接到同一个 Unix 域套接字),每个连接都打开、发送和关闭。这对于突发 10,000 个请求的负载测试效果很好,但是当我再添加几千个请求时,我突然收到此错误,所以我想知道它是否来自某些操作系统限制。

请记住,这是一个 Unix 域套接字,而不是网络 TCP 套接字。