Articles of networking

如何将原始套接字绑定到特定的接口

我的应用程序在CentOS 5.5上运行。 我正在使用原始套接字发送数据: sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); if (sd < 0) { // Error } const int opt_on = 1; rc = setsockopt(m_SocketDescriptor, IPPROTO_IP, IP_HDRINCL, &opt_on, sizeof(opt_on)); if (rc < 0) { close(sd); // Error } struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = my_ip_address; if (sendto(m_SocketDescriptor, DataBuffer, (size_t)TotalSize, 0, (struct […]

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消息,而我的应用程序无法使用其中的一些。 我想优化我的应用程序到最大,这就是问题的原因。 谢谢。

OpenCV与networking摄像机

我在Windows下使用openCV 1.1pre1。 我有一台networking摄像机,我需要从openCV抓取帧。 该摄像机可以通过HTTP在RTSP或mjpeg上传输标准mpeg4stream。 我看过很多关于在openCV中使用ffmpeg的主题,但是我不能使它工作。 我怎样才能从openCV的IP摄像头抓帧? 谢谢 安德里亚

以编程方式启用/禁用连接

在Windows 7上,我可以通过“networking连接pipe理器”面板启用和禁用连接(在系统设置中)。 我如何以编程方式在C#中执行此操作? 谢谢

rmi.transport.tcp.tcptransport Connectionhandler消耗很多的CPU

我正在运行第三方RMI服务器应用程序提供了一个方法("getImage()" returns an image as byte[]). 这个方法的实现(通过SOAP-WS获取图像)由我提供。 运行这个RMI-Server的问题是CPU占用率过高(用jvisualvm测量):65%的CPU时间进入"sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()" ,而第二个地方用15%是"sun.net.www.http.KeepAliveCache.run()" 。 “真正”的工作(缩放图像)排在第四位。 服务器运行在win 2003服务器上。 我猜资源/连接处理有问题吗? 但这是一个实现问题或Windowsconfiguration问题? 另一个观察是:如果cpu利用率高,内存利用率也上升 – 问题是:这是因为gc无法完成其工作或许多图像等待交付。 所有我可以说的内存用于byte[] 。 所以有什么想法做什么? thx提前

如何在Windows上configuration用户特定的主机文件

有许多用户访问的Windows Server 2003机器。 他们每个人都想configuration自己的主机文件,将主机名redirect到某个IP地址。 (它们是具有相同主机名和每个用户所拥有的不同IP地址的虚拟机。) C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ ETC \主机 此外,我们不能简单地要求用户使用IP地址连接,因为主机名被configuration并且需要在应用程序中使用。 我们可以有这个用户特定的主机文件configuration或任何解决方法?

使用C代码来获取与ifconfig相同的信息

有没有办法在Linux中使用C代码来获取“ifconfig eth0”将返回的相同信息? 我对IP地址,链接状态和MAC地址等东西感兴趣。 以下是ifconfig的输出示例: eth0 Link encap:Ethernet HWaddr 00:0F:20:CF:8B:42 inet addr:217.149.127.10 Bcast:217.149.127.63 Mask:255.255.255.192 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2472694671 errors:1 dropped:0 overruns:0 frame:0 TX packets:44641779 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1761467179 (1679.8 Mb) TX bytes:2870928587 (2737.9 Mb) Interrupt:28

在WinSock2.h重新定义错误

包括winsock2.h,在一个项目的文件中。 获取许多错误 – WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition 与相应的 – WinSock.h(54) : see declaration of 'fd_set' 我没有看到任何头文件中包含winsock.h。 项目中是否有可能造成这种情况? 编辑 但是,我在另一个文件中使用windows.h: http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html 编辑2 在头上我有: #include <winsock2.h> #include <iphlpapi.h> #include "\MyFiles\FileX.h" <-which #include <windows.h>

Windows对每台机器同时打开的套接字/连接数量的限制

比方说,我有一个真正的networking接口和几个回环接口的Windows 7。 我有IOCP启用服务器接受来自客户端的连接。 我试图尽可能模拟真正的客户端连接到服务器。 我的客户端代码只是build立了X个套接字连接(注意客户端绑定到给定的接口): const Int32 remotePort = 12345; const Int32 MaxSockets = 60000; Socket[] s = new Socket[MaxSockets]; IPEndPoint bindEndpoint = new IPEndPoint(IPAddress.Parse(args[0]), 0); for (Int32 i = 0; i < MaxSockets; i++) { s[i] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s[i].SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); s[i].Bind(bindEndpoint); s[i].Connect(args[1], remotePort); IPEndPoint socketInfo = (IPEndPoint)s[i].LocalEndPoint; Console.WriteLine(String.Format("Connected socket {0} […]