问题标签 [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 投票
1 回答
140 浏览

c++ - 使用 sockaddr_un 调用 connect(2) 时出现编译器错误

我在 C++ 程序中对 connect(2) 进行了简单的调用。代码是:

connect(socket_fd, (struct sockaddr *)&name, SUN_LEN(name));

(这里,name是一个struct sockaddr_un)。

当我尝试编译它时,我从 g++ 收到以下错误:

我对此完全感到困惑,因为我没有在程序的任何地方使用 -> 运算符!我获取地址的name方式或投射地址的方式有问题吗?

0 投票
1 回答
219 浏览

zsh - 关闭 zsh 中 zsocket 打开的套接字

我弄完了:

现在如何关闭套接字的 FD?(此处为 FD 20。)

0 投票
1 回答
363 浏览

c - 如何通过本地链接地址获取远程全局链接地址?

我得到一个路由信息协议(RIP)数据包,我可以从这个数据包中得到源路由器的链路本地地址。但是我无法通过链接本地地址设置路由,我需要源路由器的全局链接地址。我应该如何用C编写代码?谢谢。我试过了,但它不起作用。

}

0 投票
3 回答
8396 浏览

go - 如何在 Go 编程语言中可靠地 unlink() Unix 域套接字

我有一个托管简单 HTTP 服务的 Go 程序,localhost:8080因此我可以nginx通过该指令将我的公共主机连接到它proxy_pass,作为反向代理来服务我网站的部分请求。这一切都很好,没有问题。

我想将 Go 程序转换为在 Unix 域套接字而不是本地 TCP 套接字上托管 HTTP 服务,以提高安全性并减少 TCP 的不必要的协议开销。

问题bind():问题是 Unix 域套接字一旦被重用,即使在程序终止后也不能重用。第二次(以及之后的每次)我运行 Go 程序,它以致命错误退出"address already in use"

常见的做法是unlink()在服务器关闭时对 Unix 域套接字(即删除文件)。但是,这在 Go 中很棘手。我的第一次尝试是defer在我的主函数中使用该语句(见下文),但如果我用 CTRL-C 之类的信号中断进程,它就不会运行。我想这是可以预料的。令人失望,但并不意外。

问题unlink():当服务器进程关闭(优雅或不优雅)时,是否有关于如何连接套接字的最佳实践?

这是我func main()启动服务器监听以供参考的一部分:

0 投票
1 回答
1269 浏览

sockets - Linux:Unix 域数据报套接字不遵循连接/接收规范,是吗?

的手册connect说:

如果套接字 sockfd 是 SOCK_DGRAM 类型,那么 addr 是默认发送数据报的地址,也是接收数据报的唯一地址。

下面的 C 程序似乎揭示了UNIX 域套接字上connect/的 Linux 实现中的一个错误recv,因为它从一个地址 ( @"PWE0") 而不是它连接到的地址 ( ) 接收到一条消息@"STAR",然后终止。与此相反,我期望的行为是程序不会终止,因为它忠实地等待来自它所连接的地址的消息,而该地址永远不会到达。(我故意没有用返回值检查和打印语句来混淆这个例子,因为它可以很容易地用strace; 在现实生活中进行检查,调用将由不同的进程进行。)

那么,Linux [以及 HP-UX(带有文件系统路径名)] 是否违反了规范,还是我遗漏了什么?

0 投票
3 回答
3083 浏览

linux - Linux/Unix Socket自连接

当客户端尝试连接服务器时,如果客户端和服务器都是localhost,则可能会发生自连接(源端口和目标端口恰好相同。)。但我的问题是,客户端没有监听该端口,如何实现自连接?

0 投票
2 回答
1013 浏览

c - msgdr 的 sys/socket 缺少成员:msg_control、msg_controllen、msg_flags

我正在尝试使用 UNIX DOMAIN SOCKETS 编写一个小的客户端-服务器应用程序。

我正在使用msghdr/sendmsg但是recvmsg当我编译以下代码时,它给了我以下错误:

错误信息:

gcc sc -os -lsocket

sc:在函数“main”中:

sc:59:错误:结构没有名为“msg_control”的成员

sc:60:错误:结构没有名为“msg_controllen”的成员

sc:61:错误:结构没有名为“msg_flags”的成员

*错误代码 1

0 投票
2 回答
3833 浏览

linux - Unix 域套接字:accept() 未设置 sun_path

我正在使用 Unix 域套接字进行一些测试,并且可以毫无问题地通过它们进行通信,但是,当我accept()在测试程序的服务器端调用时,返回的struct sockaddr_un不包含sun_path.

我很确定 Inet 套接字在调用后正确填写了它们的地址和端口accept(),所以我在测试程序中做错了什么还是我期待错误的结果?

我正在运行 CentOS 6.2 和 gcc 4.4.6。

示例代码:

服务器.c

客户端.c

只是重申这个问题:

为什么在服务器上调用后不sun_path填写accept()

0 投票
1 回答
1445 浏览

c - Unix域套接字:使延迟不变

问题总结:AF_UNIX稳定发送,突发接收。

我有一个通过 unix 域数据报套接字接收数据的应用程序 B。有一个对等应用程序 A 向它发送数据。A 和 B 都在连续运行(并且是 SCHED_FIFO)。我的应用程序 A 还打印了接收时间。

对等应用程序 B 可以在不同的时间发送数据(仅以毫秒为单位)。理想情况下(我所期望的)数据包发送延迟应该与接收延迟完全匹配。例如:

其中 x 是一个恒定的延迟。

但是当我尝试在 B 中观察到的是:

(w,x,y,z 是不同的常数延迟)。因此,在给出发送时间时,我无法预测接收时间)。

是因为unix域套接字涉及一些缓冲吗?请针对该问题提出一些解决方法,以便从发送时间可以预测接收时间。我需要 1 毫秒的精度。

(我使用的是 vanilla Linux 3.0 内核)

0 投票
2 回答
13713 浏览

c - 使用 Unix 套接字获取“地址已在使用”错误

在下面使用 Unix 本地套接字编写 C 源代码时,我收到一个关于地址已在使用中的错误。检查后man 7 Unix了更多信息后,我尝试创建一个执行我的程序的子文件夹(显然修改sun_path了当前文件夹上的字段),但错误始终相同。

有人可以帮助我吗?

源代码: