Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 关闭代理内的套接字_Linux_Sockets_Networking_Tcp_Proxy - Fatal编程技术网

Linux 关闭代理内的套接字

Linux 关闭代理内的套接字,linux,sockets,networking,tcp,proxy,Linux,Sockets,Networking,Tcp,Proxy,我在linux中实现了一个转发代理,它只监听几个端口。每当一个连接发生时,它就会进入外部世界。 我的设置如下所示: OuterworldProxy(侦听端口A)浏览器(使用代理集toPort A配置) 但是,我不确定何时关闭代理外部世界和代理浏览器之间的连接。 我的印象是,若我看到一个数据大小为0(recv())的数据包,那个么它就是客户端通信的结束。一旦我得到“recv()=0”,我就会与外部世界进行“close()”。这样做对吗?或者我应该执行shutdown()?此外,我认为有时浏览器发送

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

OuterworldProxy(侦听端口A)浏览器(使用代理集toPort A配置)

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

我哪里会出错呢


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

你将进行读取,获取最终数据,将其写入另一个套接字,进行另一次读取,获取EOF,然后关闭。嘿,艾伦,所以,现在我想澄清一下:“世界(www_sockfd)(client_sockfd)代理(server_sockfd)(browser_sockfd)browser”(如果我是recv()在服务器\u sockfd上返回0,然后我需要在写入时关闭(客户端\u sockfd)。一次,我在客户端\u sockfd上recv(),0字节,然后在客户端\u sockfd和服务器\u sockfd上关闭()。是这样吗?