问题标签 [socketpair]

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 回答
362 浏览

c++ - socketpair() & 在工作套接字的 close() 之后创建新的子进程

首先:这不是 Unix/Linux 系统。我正在使用 IBM AS/400 V7R1 (C++ 98) 并且无权访问 fork()。不过,我确实有 spawnp() 来启动新的子进程,并且 AS/400 支持进程组的概念。

在我的系统中,我有一个启动 X 个孩子的“头部”程序。该头在传入连接上调用accept(),并立即通过sendmsg() 将套接字提供给其中一个子进程。孩子们都坐在 recvmsg() 上。对于 head 程序,它是这样的:

我有理由/计划在初始程序启动后启动其他子进程。我计划向 head 程序发送一些信号,这将导致 spawnp() 调用再次执行。“close(worker_sd)”让我担心。我可以在关闭工作套接字后再次调用 spawnp() 吗?毕竟,这只是一个数字。保持worker_sd打开可以吗?

0 投票
2 回答
116 浏览

c - 在应用程序退出之前应该关闭套接字对吗?

我有一个应用程序,想知道我在使用时是否泄漏了文件描述符valgrind -track-fds=yes ./app

我得到:

这被认为是文件描述符泄漏吗?当应用程序终止或Linux内核处理它时,一个关闭的socketPair应该结束吗?

0 投票
0 回答
158 浏览

c++ - getsockname() 返回看起来无效的名称

我是套接字编程的新手。在创建了一个套接字对socketpair()之后,我想研究套接字绑定到的地址。但是当我尝试用 来确定这一点时getsockname(),我得到了一个看起来无效的结果。

编码:

输出:

根据我的理解,getsockname()它告诉我应该有一个长度为 2 的地址。但是开始的两个字节su.sun_path0- 这肯定不是一个有效的地址,可以吗?

我知道这socketpair()会创建一对“未命名的”套接字——但我认为“未命名的套接字”只是意味着一个抽象的命名空间,它仍然是一些唯一的、非 NULL 字符串。

有人可以解释为什么这段代码会输出观察到的看起来无效的命名空间吗?

0 投票
1 回答
899 浏览

linux - 为什么 socketpair() 允许 SOCK_DGRAM 类型?

我最近一直在学习 Linux 套接字编程,主要来自这个站点

该网站说使用域/类型组合PF_LOCAL/ SOCK_DGRAM...

在本地主机内提供数据报服务。请注意,此服务是无连接的,但可靠,但如果内核缓冲区耗尽,可能会丢失数据包。

socketpair(int domain, int type, int protocol, int sv[2])那么,我的问题是,当根据其手册页时,为什么允许这种组合......

socketpair() 调用在指定域中创建指定类型的未命名连接套接字对...

这里不是矛盾吗?

我认为SOCK_DGRAMPF_LOCALandPF_INET域中隐含 UDP,这是一个无连接协议,所以我无法调和与socketpair()' 声称创建连接套接字的看似冲突。

0 投票
1 回答
272 浏览

linux - 写入 SOCK_SEQPACKET 是原子的吗?

我的意思是原子是成功或失败,什么都不做。

我知道socketpair(AF_LOCAL, SOCK_STREAM)不是原子的,如果多个进程/线程调用write(fd, buf, len),返回值write()可能> 0 && < len会导致数据乱序。

如果多个进程/线程write(buf, len)sock_fd由创建的一个socketpair(AF_LOCAL, SOCK_SEQPACKET),它是原子的吗?

我检查了 Linux 手册,发现pipe()如果len小于PIPE_BUF,则write/writev是原子的。

我什么也没找到socketpair。我写了一个测试代码,发现它似乎SOCK_SEQPACKET是原子的,我将随机长度的缓冲区写入fd并且返回值始终是-1or len

0 投票
1 回答
226 浏览

process - Fork 不会在 execv 中加载程序

下面的程序既不将程序加载到子进程也不打印“之前”和“之后”。但是 ps aux 显示了进程的创建(但没有加载 args0 程序)。我正在使用定义为套接字对的 PI​​PE。args0[] 保存子程序的可执行名称,args1[] 保存子程序的名称。args2 和 args3 是预定义的值,不会更改,应作为参数发送给子级。您可以假设 char args2[] = "10" --> 用户输入(数字)并转换为字符串。我只是不明白为什么至少 printf("before") 没有打印出来。我读到了 fflush 并将 \n 放在每个 printf 上,我做到了。所以到目前为止,我的程序中的所有内容都已正确打印。

我真的很感激你的回复。

}

}

我无法发布整个代码,因为它很长并且需要解释。我很可能在指针分配方面遇到问题,我错误地认为这是正确的方法。非常感谢任何帮助

0 投票
1 回答
854 浏览

c++ - C++ 套接字对不读取/写入父/子

我被分配了一个项目,在该项目中我需要使用Unix 域套接字在父进程和子进程之间进行双向通信。我最初的方法是创建一个子服务器和服务器,但我遇到了一些严重的连接和路径问题。如果有人希望看到该代码,我愿意提供。

无论如何,我已经到达了程序中打印出“父母已写”的那一行,尽管我并不完全相信它确实如此,因为没有发生后续阅读。我曾在不同的地方关闭管道并改变我的阅读/写作方式。

我现在使用socketpair()来设置一对套接字。除了套接字,我不能使用任何其他类型的 IPC。这些信息对我来说是全新的,所以请原谅草率的代码。

请忽略长#include 列表,将尽快清理。

同样,我当前的输出停止在“父母写给孩子”,然后它继续运行,没有关闭,所以我认为这是孩子读等待接收的东西。

我的程序需要能够读取和写入非常长的文件,因此您将在整个代码中看到序列化和解析工作。序列化和解析在项目的不同部分完美运行,所以我知道这不是问题。这是该死的插座!

无论如何,代码:

MINI VERSION(同样的问题,说“父母已经写信给孩子......”然后没有做任何进一步的事情,也没有退出:

0 投票
1 回答
161 浏览

c - 使用 dup2 重定向 printf 失败

代码如下。

Q1:

如果dup2(fd3, STDOUT_FILENO),string2将在 log.txt 中。

如果dup2(g_ctl[0], STDOUT_FILENO),string2将不会被g_ctl[1]. string1并且ls -al会收到输出,为什么?

Q2:

第三个库有一些 stdout/stderr 日志,如果使用dup2(socket_fd, STDOUT_FILENO),所有日志都将通过套接字收集。但我也想同时将所有日志打印到屏幕上,怎么做?

0 投票
1 回答
342 浏览

rust - Communicating with a child process through a Tokio UnixStream

I'm trying to get a parent process and a child process to communicate with each other using a Tokio UnixStream. Problem is that for some reason the child is unable to read whatever the parent writes to the socket (and presumably the other way around.

The function I have is similar to the following

The socket doesn't get closed, otherwise I'd get an immediate error trying to read from socks.1. If I move the read into the parent process it works as expected. The first line Reading from master gets printed, but the second line never gets called.

I cannot change the communication paradigm, since I'll be using execve to start another binary that expects to be talking to a socketpair.

Any idea what I'm doing wrong here? Is it something to do with the async/await statemachine that's generated from the async function?

0 投票
0 回答
21 浏览

linux - socketpair() 是否有可能返回相同的对?

我了解socketpairAPI 可以生成一对连接的套接字。socketpair()但是在同一个过程中可以生成两个相同的对是真的吗?

如果打印出fd对,是​​否可以看到以下结果?

如果这是正常行为,我们如何防止在关闭错误后读取?