有两个连接的sockets。 我怎样才能互相连接?
int client = get_connected_client_socket(); int proxy = get_connected_proxy_socket(); negotiate_with_proxy(代理); iterconnect(客户端,代理); //现在忘记了客户端和代理。 //系统应该处理IO /关机/closures。 //理想的是,甚至没有任何用户空间进程的支持。
Linux能做到吗? 可以通过欺骗连接跟踪来改变现有连接的跟踪状态吗?
@相关确定我能写多less文件句柄; 将数据从一个FH复制到另一个
你知道拼接() 。 根据你的两个问题,我认为这是你的目标。 最后我检查了你不能在一个拼接调用中做到这一点,因为两个文件描述符不能是套接字。 但是你应该可以在2个调用中完成(sockin-> pipe-> sockout)。 也看看tee() 。 这些可能不是你想要的,但是从我所能想象到的他们正在进入。
您将需要一个用户空间进程来挂起,并将数据从一个套接字复制到另一个套接字。 这很简单:
read
任何数据, write
套接字B; read
任何数据, write
套接字A; read
返回0,则调用套接字B上的shutdown(SHUT_WR)
read
返回0,则调用套接字A上的shutdown(SHUT_WR)
close
两个套接字并退出; EPIPE
,则close
两个套接字并退出。 正如牛顿瀑布所提到的,你可以使用splice()
以零拷贝的方式来做到这一点,但这只是一个性能提升; 让它首先read
/ write
。 你应该能够把一个孩子fork()
,这样做会让你的主进程“火,忘了”。
unix域套接字可能会有所帮助。 见手册页:
man unix
检查socat工具。 这是解决这类问题的最佳工具。