2

可以连接两个插座吗?

例如,如果一个进程在某个时候充当两个其他进程之间的消息路由器,那么能够让开将节省一堆套接字 IO。这似乎应该是可能的,但我什至从未听说过它正在完成!

如果可能,是否可以在 Linux 和 Windows 上使用?如果是这样,是否使用不同的机制来设置它?

顺便说一句:我刚发现这个:

Linux splice() 系统调用。

这似乎接近我的要求(当然假设这也适用于套接字 FD),但是是否有 Windows 等价物?

4

3 回答 3

2

AFAIK,这是不可能的。

一个简单的例子:如果你的进程在三台不同的机器上运行,代理机器如何在不涉及 TCP/UDP/任何级别的流量重定向的情况下退出?

splice 不是解决方案,它只是优化 i/o 传输,避免不必要的内存复制,但无论如何,您需要一个循环输入并调用 splice 以将数据“传输”到输出的进程(如果套接字是真实网络套接字,数据必须通过网卡两次)。

律师事务所,安德里亚

于 2009-02-02T15:44:00.563 回答
1

简短的回答是否

稍长的答案是Not General。系统调用是特定于splice()Linux 的,并且没有为套接字定义。如果要为套接字定义它,那么它将是一种将内存映射文件连接到流套接字或从流套接字连接的方法它不会是双向的。大神们只知道这个区域的 Windows 上存在什么。

The Excessively Geeky answer is Well, You Could Extend The OS Kernel, But... that might not be what you want. If neither remote address of the two PF_INET or PF_INET6 sockets is node-local, then the router will still be forwarding packets between the two remote hosts, each of which has a socket 5-tuple that references your router host. And no, I will not explain the dark arts of ARP/ND6 spoofing to work around that problem.

于 2009-05-26T22:35:22.343 回答
1

I have programed something like this in the past. Assuming, you are the programmer for all three processes it is possible but tricky. If you have socket connection A and socket connection B, you take the information from A, send it to B and have B send a connection request to A. This will require a bit of coding, but it should work. It did for me. Hope that works! Good luck!

于 2012-11-25T19:52:57.077 回答