linux - 关闭代理内的套接字

标签 linux sockets networking tcp proxy

我在 linux 中实现了一个转发代理,它监听几个端口。每当发生连接时,它都会进入外部世界。 我的设置如下所示:

Outerworld<----->代理(监听端口A)<-------->浏览器(配置代理设置为端口A)

但是,我不确定何时关闭代理外部世界和代理浏览器之间的连接。 我的印象是,如果我看到一个数据大小为 0 (recv()) 的数据包,那么它就是来自客户端的通信结束。一旦我得到“recv()=0”,我就对外部世界执行“close()”。这是正确的做法吗?或者我应该关闭()?另外,我认为有时浏览器会发送一个带有数据包的“FIN”,但我没能捕捉到它。我有时会在从未关闭的套接字上看到来自浏览器的连接。 (Linux 重用相同的 fd 编号。这是原因之一,我相信我缺少套接字闭包。)

我哪里会出错。

谢谢

最佳答案

对于通用的 TCP 转发器,关闭是正确的选择。当您从一侧读取 EOF 时,停止读取该侧并关闭另一侧的写入。然后你可以继续读写另一个方向,直到它也给你一个 EOF,然后你关闭两者。

关于linux - 关闭代理内的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996867/

相关文章:

linux - 如何获取完整的目标IP地址(x.x.x.x/x)netstat命令?

linux - Linux 程序如何知道它是如何启动 : from command line? 或由 cron 或其他东西启动的?

linux - 如何从一台Linux机器连接到一台Linux机器,查询PostgreSQL并获取数据

javascript - 使用 Node.js 和 Socket.io 定位文件

c - 如何找出在 Linux 上使用 unix 域套接字连接的两个客户端之间缓冲的数据

java - 在 Retrofit 中,为什么每个接口(interface)使用一种方法

linux - 在 Linux 中的 Javascript 中使用 ActiveX 对象(在 Firefox 中)

Python 在一个守护进程中运行两个具有不同定时器的函数

Android套接字客户端超时

iphone - iphone 应用程序的 SSL Wrapper