标签: socket

如何通过 Debian Squeeze 上的 shell 与 Unix 域套接字通信?

我正在运行 Debian Squeeze Web 服务器。我已经在其上安装了 memcached,并将 memcached 配置为侦听 Unix 域套接字(at /tmp/memcached.sock),因为它只需要从位于同一服务器上的网站接收消息。

它似乎工作正常,但我也想通过 shell 与 memcached 通信,以检查它是否在做我认为它在做的事情。

memcached 通过简单的 ASCII 协议接受消息(如果我理解正确的话)。如果它正在侦听 TCP/IP,我可以通过以下方式向它发送消息nc

$ echo "stats settings" | nc localhost 11211
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将该文本发送到域套接字。

在我的笔记本电脑(运行OS X Lion中),都nctelnet有选择(-U-u分别)使用域套接字。但是,在我的 Debian Squeeze Web 服务器上,这些选项不存在。

shell debian telnet socket

127
推荐指数
6
解决办法
21万
查看次数

什么是插座?

有人可以向我解释什么是套接字吗?我在 SSL 等上下文中的许多首字母缩略词中看到它。

还有,为什么叫socket呢?纯粹是因为这是他们发明的名字吗?或者这是他们想出的第一个名字?

networking terminology history socket

72
推荐指数
4
解决办法
5万
查看次数

谁有这个unix socketpair的另一端?

我想确定哪个进程具有 UNIX 套接字的另一端。

具体来说,我问的是用 来创建的socketpair(),尽管任何 UNIX 套接字的问题都是一样的。

我有一个程序parent可以创建一个socketpair(AF_UNIX, SOCK_STREAM, 0, fds), 和fork()s。父进程关闭fds[1]并保持fds[0]通信。孩子反其道而行之,close(fds[0]); s=fds[1]。然后孩子exec()的另一个程序,child1。两者可以通过这个 socketpair 来回通信。

现在,假设我知道parent是谁,但我想弄清楚是谁child1。我该怎么做呢?

有几种工具可供我使用,但没有一个可以告诉我套接字的另一端是哪个进程。我试过了:

  • lsof -c progname
  • lsof -c parent -c child1
  • ls -l /proc/$(pidof server)/fd
  • cat /proc/net/unix

基本上,我可以看到两个套接字以及关于它们的所有内容,但无法判断它们是否已连接。我试图确定父进程中的哪个 FD 正在与哪个子进程通信。

process lsof open-files socket

68
推荐指数
5
解决办法
4万
查看次数

unix 套接字与 TCP 端口的性能

例如在 php-fpm 上:

#listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock
Run Code Online (Sandbox Code Playgroud)

在 TCP 端口上使用基于 unix 套接字的侦听器之间有什么主要的性能差异吗?(不仅适用于 PHP,而且适用于一般情况。每个服务是否不同?)

performance tcp socket

57
推荐指数
2
解决办法
4万
查看次数

如何在 /proc/fd 中找到有关套接字文件的更多信息?

查看/proc/$mypid/fd/,我看到这些文件

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]
Run Code Online (Sandbox Code Playgroud)

因为我可以访问代码,所以我知道这些套接字与 TCP 连接相关(一个是连接到某台机器上的端口 5672,另一个连接到其他机器上的端口 3306),但我想知道哪个套接字是绑定到哪个连接。我怎样才能做到这一点?

更一般地说,我如何向操作系统询问套接字的另一端是什么?

networking proc socket

54
推荐指数
1
解决办法
7万
查看次数

Linux 内核中的 FIFO、管道和 Unix 域套接字是否相同?

我听说 FIFO 是命名管道。它们具有完全相同的语义。另一方面,我认为 Unix 域套接字与管道非常相似(尽管我从未使用过它)。所以我想知道它们是否都指的是 Linux 内核中的相同实现。任何的想法?

pipe ipc socket linux-kernel fifo

44
推荐指数
2
解决办法
3万
查看次数

/proc/PID/fd/X 链接号

在 Linux 中/proc/PID/fd/X,作为管道或套接字的文件描述符的链接有一个编号,例如:

l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839]
l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839]
lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925]
lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926]
lr-x------ 1 user user 64 Mar 24 00:05 5 -> pipe:[3142927]
l-wx------ 1 user user 64 Mar 24 00:05 6 -> pipe:[3142927]
lrwx------ 1 user user 64 Mar 24 00:05 7 …
Run Code Online (Sandbox Code Playgroud)

linux pipe open-files proc socket

39
推荐指数
2
解决办法
4万
查看次数

为什么 TCP/IP 套接字被认为是“打开的文件”?

我需要一些帮助来理解我确信 Linux 中的一个基本概念:打开文件的限制。具体来说,我对为什么打开的套接字可以计入系统上“打开文件”的总数感到困惑。

有人可以详细说明原因吗?我知道这可能可以追溯到 Linux 中的整个“一切都是文件”原则,但任何其他细节都将不胜感激。

networking files socket

35
推荐指数
3
解决办法
3万
查看次数

如何为我的应用程序保留端口?

如何为我的自定义应用程序保留端口列表?

具体来说,我正在创建的产品有很多流程,并且它们之间有很多交互。

我遇到的问题是——每隔一段时间——操作系统就会窃取我的端口。这是罕见的,但它发生了。

这可能是因为不同的应用程序使用了未指定端口的“::bind”。

有时,当我使用未绑定的套接字调用“::connect”时,我自己的应用程序会窃取端口。从手册页中可以看出:

如果套接字尚未绑定到本地地址,connect() 会将其绑定到一个地址,除非套接字的地址族是 AF_UNIX,否则该地址是未使用的本地地址。

所以我的问题是,我可以保留我需要的端口以便操作系统不使用它们吗?这可以通过 /etc/services 完成吗?或者有不同的方法吗?

tcp udp socket

33
推荐指数
3
解决办法
6万
查看次数

服务器如何找出要发送到哪个客户端端口?

据我了解,这是客户端发出连接请求时发生的情况:

  1. 服务器将绑定到特定的端口号。端口号始终绑定到侦听进程。由于只有服务器在监听传入的连接,我们不需要在客户端绑定
  2. 服务器将继续监听该端口号。
  3. 客户端将发送connect()请求。
  4. 服务器将使用accept(). 一旦服务器接受客户端的请求,内核分配服务器进一步随机端口号send()receive(),因为不能用于发送和监听服务器上的相同的端口号,和先前端口仍然是监听新连接

鉴于所有这些,服务器如何找出客户端正在接收的端口?我知道客户端将发送带有源端口和目标端口的 TCP 段,因此服务器将使用该段的源端口作为其目标端口,但是服务器调用什么函数来查找该端口?是accept()吗?

tcp socket

29
推荐指数
1
解决办法
8万
查看次数