Articles of networking

TCP重传在Linux上的应用控制

对于急躁: 如何改变/proc/sys/net/ipv4/tcp_retries2在Linux中的单个连接的值,使用setsockopt() , ioctl()等,或者这是可能的? 更长的描述: 我正在开发一个使用长轮询HTTP请求的应用程序。 在服务器端,客户端closures连接时需要知道。 准确性并不重要,但肯定不会15分钟。 接近一分钟会好起来的。 对于那些不熟悉这个概念的人来说,一个长轮询HTTP请求就像这样工作: 客户端发送一个请求 服务器响应HTTP标头,但保持响应打开。 使用分块传输编码,允许服务器在数据可用时发送数据位。 当所有数据被发送时,服务器发送一个“closures块”来表示响应已完成。 在我的应用程序中,服务器每隔一段时间(默认30秒)向客户端发送“心跳”。 心跳只是作为响应块发送的换行符。 这是为了保持线路繁忙,以便我们通知连接丢失。 当客户端正确closures时没有问题。 但是,当强制closures(例如,客户端机器断电)时,不会发送TCP重置。 在这种情况下,服务器发送一个心跳,客户端不会确认。 在这之后,服务器在放弃并向应用层(我们的HTTP服务器)报告失败后大约持续15分钟重传数据包。 在我的情况下,15分钟太久了。 我可以通过写入/proc/sys/net/ipv4/的以下文件来控制重新传输时间: tcp_retries1 – INTEGER This value influences the time, after which TCP decides, that something is wrong due to unacknowledged RTO retransmissions, and reports this suspicion to the network layer. See tcp_retries2 for […]

如何监视Linux UDP缓冲区的可用空间?

我有一个Linux上的Java应用程序打开UDP套接字,并等待消息。 在重负载的情况下几个小时后,有一个数据包丢失,即数据包被内核接收,但不是由我的应用程序(我们看到在嗅探器中丢失的数据包,我们看到在netstat丢失的UDP数据包,我们没有看到这些数据包在我们的应用程序日志)。 我们尝试了扩大套接字缓冲区,但这没有帮助 – 我们之后开始丢失数据包,但就是这样。 对于debugging,我想知道在任何时候,操作系统udp缓冲区是多么的充足。 Googlesearch,但没有find任何东西。 你可以帮我吗? PS伙计们,我知道UDP是不可靠的。 但是 – 我的电脑收到所有UDP消息,而我的应用程序无法使用其中的一些。 我想优化我的应用程序到最大,这就是问题的原因。 谢谢。

如何:检查不可用networking共享时防止超时 – C#

我们有一些基本的C#逻辑遍历一个目录并返回其中的文件夹和文件。 当针对无法访问或无效的networking共享(\\ server \ share \文件夹)运行时,代码在从呼叫返回之前似乎“挂起”约30秒。 我想最终将尝试从给定的path获取文件夹和文件,但没有超时期限的方法。 换句话说,完全减less或消除超时。 我已经尝试了一些简单的事情,比如提前确认目录的存在,认为一个“不可用的”networking驱动器会很快返回错误,但是这并不像预期的那样工作。 System.IO.Directory.Exists(path) //hangs System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path); //hangs 有什么build议可以帮助我实现一个高效(希望得到pipe理)的解决scheme?

AF_UNIX在Windows中

我有一个应用程序,我希望在Windows上使用。 我正在使用AF_UNIX系列窗户。 我想知道,AF_UNIX家族在Windows中可用。 如果没有,那么AF_UNIX有没有其他的替代? 谢谢Arpit

如何查找正在使用的临时端口数量?

我有一种情况,我正在陷入短暂的端口耗尽,然后引起exception。 我想节stream的连接,以避免这一点。 有没有办法来检测正在使用的临时端口的数量? 谢谢,埃里克

无法通过非默认NIC发送多播

在Windows 7虚拟机上,我尝试使用第二个(非默认的)两个networking接口将UDP数据包发送到多播地址。 我可以使用/ INTF选项(不允许指定端口)使用mcast来实现此目的,但我的C#代码不起作用: void run(string ipaddrstr, int port, string nicaddrstr) { int index = -1; // Create a socket for the UDP broadcast Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPAddress ipaddr = IPAddress.Parse(ipaddrstr); IPAddress nicAddr = IPAddress.Parse(nicaddrstr); int i = 0; foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType […]

在Java中设置Windows XP中的networking接口的IP地址

我需要从我们的Java应用程序在Windows XP机器上设置IP地址。 因为我不知道如何纯粹从Java设置,我想用netsh来设置它。 因为有多个接口我需要获得特殊的“长名称”的networking连接。 Nethsh命令将如下所示: netsh接口ip设置地址名称=“本地连接”源= dhcp 我试图使用 NetworkInterface的 上课获得它,但没有成功。 对于Windows XP上的networking名称,它返回名称,如“eth0”:) 我目前parsing命令“ipconfig”的输出,但不仅是问题,它也不与各种XP语言突变的规模。

将Web应用程序加载为Windows桌面应用程序的简单/最佳方法?

你好基本上我有一个使用HTML5 / PHP等build立的Web应用程序,它是一个音乐播放器,类似于Spotify和潘多拉。 我想分发作为桌面应用程序的Web应用程序,以便人们可以直接从桌面运行它,而无需打开浏览器。 我不喜欢像系统的浏览器,只是加载网页视图(类似于在iOS中加载web视图)(没有标签没有url栏等) 我听说棱镜,但已停产,我无法find任何地方的下载链接。 你有什么build议吗? 对于Mac OS X,我发现了FluidApp,它似乎工作得很好,因为它build立了一个独立的应用程序。 对于iOS,我可以简单地通过webview加载web应用程序,它工作的很好,正是我所需要的。 对于android我基本上加载一个webview。 Windows让我停下来通过一个独立的桌面应用程序加载Web应用程序。 所以如果有人能够帮助我,将不胜感激!

Windows防火墙编程

我GOOGLE了很多次,直到我创build了这个问题,所以请原谅,如果有一些教程。 我没有find他们。 如何在Windows中编写防火墙应用程序? 我想过在每个进程中使用内联钩子的用户模式fiewall,但是有一个问题,我不能在Windows 7中挂钩csrss.exe(它创build新的进程)。第二件事是它不是很干净,确定为恶意软件。 所以我认为我应该把内核模式的API作为一个驱动程序。 但是有三个问题。 首先,我不知道Windows套接字的内核API。 其次我没有任何有关内核模式钩子的经验。 第三,我不知道这是否正确。 别担心,我知道这不是一件容易的事情,我不是初学者,只是一个想法;)。 如果有人有好的信息,请分享。 哦,我想写的x86系统;)。

监听传入数据时,“现有连接被远程主机强制closures”

在使用boost asio时,我偶然发现了一些奇怪的行为,我不太明白。 我写了一个最小的testing程序来复制这个问题: #include <boost/asio.hpp> #include <iostream> using boost::asio::ip::udp; int main(int argc,char *argv[]) { boost::asio::io_service ioService; udp::resolver resolver(ioService); udp::resolver::query queryListen("127.0.0.1","50001"); auto epListen = *resolver.resolve(queryListen); udp::socket socket(ioService,epListen); udp::resolver::query querySend("127.0.0.1","55006"); auto epSend = *resolver.resolve(querySend); boost::system::error_code err; std::array<char,12> buffer = {'1','2','3','4','5','6','7','8','9','10','11','12'}; socket.send_to( boost::asio::buffer(&buffer[0],buffer.size()), epSend,0,err ); if(!err) { std::cout<<"Sent successfully!"<<std::endl; auto numBytes = socket.receive( boost::asio::buffer(&buffer[0],buffer.size()),0, err ); if(!err) std::cout<<"Received […]