关闭代理中的套接字

时间:2012-08-16 23:29:50

标签: linux sockets networking tcp proxy

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

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

但是,我不确定何时关闭代理外部世界和代理浏览器之间的连接。 我的印象是,如果我看到数据大小为0的数据包(recv()),那么它就是客户端的通信结束。一旦我得到“recv()= 0”,我就会与外界“关闭()”。这是正确的方法吗?或者我应该关机()?此外,我认为有时浏览器会发送一个带有数据包的“FIN”,但我无法抓住它。我有时会看到从未关闭的套接字上的浏览器连接。 (Linux重用了相同的fd数字。这就是其中一个原因,我相信我缺少套接字闭包。)

我哪里可能出错。

由于

1 个答案:

答案 0 :(得分:2)

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