问题标签 [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.
c++ - 使用 sockaddr_un 调用 connect(2) 时出现编译器错误
我在 C++ 程序中对 connect(2) 进行了简单的调用。代码是:
connect(socket_fd, (struct sockaddr *)&name, SUN_LEN(name));
(这里,name
是一个struct sockaddr_un
)。
当我尝试编译它时,我从 g++ 收到以下错误:
我对此完全感到困惑,因为我没有在程序的任何地方使用 -> 运算符!我获取地址的name
方式或投射地址的方式有问题吗?
zsh - 关闭 zsh 中 zsocket 打开的套接字
我弄完了:
现在如何关闭套接字的 FD?(此处为 FD 20。)
c - 如何通过本地链接地址获取远程全局链接地址?
我得到一个路由信息协议(RIP)数据包,我可以从这个数据包中得到源路由器的链路本地地址。但是我无法通过链接本地地址设置路由,我需要源路由器的全局链接地址。我应该如何用C编写代码?谢谢。我试过了,但它不起作用。
}
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()
启动服务器监听以供参考的一部分:
sockets - Linux:Unix 域数据报套接字不遵循连接/接收规范,是吗?
的手册connect
说:
如果套接字 sockfd 是 SOCK_DGRAM 类型,那么 addr 是默认发送数据报的地址,也是接收数据报的唯一地址。
下面的 C 程序似乎揭示了UNIX 域套接字上connect
/的 Linux 实现中的一个错误recv
,因为它从一个地址 ( @"PWE0"
) 而不是它连接到的地址 ( ) 接收到一条消息@"STAR"
,然后终止。与此相反,我期望的行为是程序不会终止,因为它忠实地等待来自它所连接的地址的消息,而该地址永远不会到达。(我故意没有用返回值检查和打印语句来混淆这个例子,因为它可以很容易地用strace
; 在现实生活中进行检查,调用将由不同的进程进行。)
那么,Linux [以及 HP-UX(带有文件系统路径名)] 是否违反了规范,还是我遗漏了什么?
linux - Linux/Unix Socket自连接
当客户端尝试连接服务器时,如果客户端和服务器都是localhost,则可能会发生自连接(源端口和目标端口恰好相同。)。但我的问题是,客户端没有监听该端口,如何实现自连接?
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
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()
?
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 内核)
c - 使用 Unix 套接字获取“地址已在使用”错误
在下面使用 Unix 本地套接字编写 C 源代码时,我收到一个关于地址已在使用中的错误。检查后man 7 Unix
了更多信息后,我尝试创建一个执行我的程序的子文件夹(显然修改sun_path
了当前文件夹上的字段),但错误始终相同。
有人可以帮助我吗?
源代码: