Skip to main content
 首页 » 编程设计

c之Linux内核中的"tcp session control protocol"

2023年11月22日5Renyi-Fan

我在 Linux 环境下编程。

我想在两台 PC 之间建立一个 TCP 套接字,并对其进行多路复用。

具体来说,这是伪代码:

void func_in_process0() 
{ 
    socket s = socket(AF_INET, SOCK_STREAM, 0); 
    connect(s, "1.1.1.1", 8080); 
 
    socket s1 = ADD_CHANNEL(s, 1);                    // key part 
    SEND_FILE_DESCRIPTOR_TO_PROCESS(s1, process1); 
    socket s2 = ADD_CHANNEL(s, 2);                    // key part 
    SEND_FILE_DESCRIPTOR_TO_PROCESS(s2, process2); 
 
    WAIT_FOR_PROCESS_TO_FINISH(process1); 
    WAIT_FOR_PROCESS_TO_FINISH(process2); 
 
    close(s); 
} 
 
void func_in_process1() 
{ 
    socket s1 = GET_SOCKET_FROM_PROCESS0(); 
 
    send(s1, "abcdefg"); 
    close(s1); 
} 
 
void func_in_process2() 
{ 
    socket s2 = GET_SOCKET_FROM_PROCESS0(); 
 
    send(s2, "abcdefg"); 
    close(s2); 
} 

关键部分是如何实现函数ADD_CHANNEL。

我找到了一个文档 TCP Session Control Protocol它提供了我想要的功能。 但我不认为它是在 Linux 内核中实现的。

我可以在用户空间实现这个协议(protocol),但是变量“s1”和“s2”不会是文件描述符,不能被发送到其他进程。

编辑:

  1. process0、process1 和 process2 都在本地主机上。

  2. 套接字“s”是客户端套接字。

  3. 1.1.1.1是远程PC,是服务器。所以proc1和proc2都通过CHANNEL向1.1.1.1发送数据包。

  4. 服务器也是 CHANNEL 感知的。

编辑2:

  1. 我阅读了 SCP Protocol ,但它仍然没有内核实现。

  2. 我学习了 SCTP 多流,它是在内核中实现的,但是没有创建子套接字的 API,所以问题仍然存在。

请您参考如下方法:

当然,它们可以是文件描述符。创建两个管道并将一端连接到其他两个进程中的每一个。您的“多路复用器”将从两个双向管道的另一端读取和写入两个。