Articles of networking

如何处理Linux套接字revellent POLLERR,POLLHUP和POLLNVAL?

我想知道当轮询设置这些位时应该做什么? closures套接字,忽略它或什么?

在c / c ++中查找可用的networking接口

有没有人知道ac / c + +代码find可用的networking接口? 我一直在寻找一些代码,但大部分时间都是相当复杂的。 有一个简单的方法来做到这一点? UPDATE 在Ubuntu / Linux上

如何通过Java获得Linux上的计算机的IP?

如何通过Java获得Linux上的计算机的IP? 我search了networking的例子,我发现一些关于NetworkInterface类,但我不能包裹我的头如何获得IP地址。 如果我有多个networking接口在同一时间运行会发生什么? 哪个IP地址将被返回。 我真的很感激一些代码示例。 PS:我到目前为止已经使用了InetAddress类,这是跨平台应用程序的一个糟糕的解决scheme。 (WIN / Linux的)。

仅使用proc获取本地networking接口地址?

如何仅使用proc获取所有networking接口的(IPv4)地址? 经过一番广泛的调查,我发现了以下几点: ifconfig使用SIOCGIFADDR ,这需要打开套接字并提前了解所有接口名称。 它也没有logging在Linux上的任何手册页面上。 proc包含/proc/net/dev ,但这是接口统计信息的列表。 proc包含/proc/net/if_inet6 ,这正是我所需要的,但对于IPv6。 通常在proc中很容易find接口,但实际的地址是很less使用的,除非明确指出某个连接的一部分。 有一个名为getifaddrs的系统调用,这是你期望在Windows中看到的非常“神奇”的function。 它也在BSD上实现。 但是,它不是非常面向文本的,所以很难从非C语言中使用。

如何closures一个死亡程序打开的sockets?

我有一个Python应用程序,它打开一个简单的TCP套接字与另一个主机上的另一个Python应用程序通信。 有时程序会出错,或者我会直接杀死它,在任何情况下,套接字可能会在未知的时间被打开。 下一次我去运行程序,我得到这个错误: socket.error: [Errno 98] Address already in use 现在程序总是试图使用相同的端口,所以它看起来好像还是开放的。 我查了一下,很确定程序没有在后台运行,但我的地址仍在使用中。 所以,我怎么手动(或以其他方式)closures套接字/地址,以便我的程序可以立即重新使用它? 更新 根据迈克的回答,我检查了socket(7)页面,看着SO_REUSEADDR: SO_REUSEADDR Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses. For AF_INET sockets this means that a socket may bind, except when there is an active listening socket bound to […]

如何在不查询内核的情况下监控C程序中的NIC状态(up / down)?

现在我需要实时获取NIC的状态(向上或向下)。 这意味着当NIC在阻塞的循环中上下移动时,我必须捕获内核中断。 我的第一个愚蠢的方法是检查/ sys / class / net / eth0 / operstate或使用ioctl在循环中每隔100ms获取ifflag。 但100ms太长的应用程序重新路由stream量,每100ms轮询内核也不是好主意。 一旦我注意到可以在块模式下监视文件的inotify函数。 但不幸的是,它不能监视/ sys / class / net / eth0 / operstate文件,因为/ sys位于不在磁盘中的RAM中。 那么,除了编写一个内核模块来捕捉C程序中的NIC中断(up / down)以外,还有其他方法吗?

Linux获取所有networking接口名称

我需要收集所有的界面名称,甚至是那些目前还没有的名称。 像ifconfig -a一样。 getifaddrs()多次遍历相同的接口名称。 我怎样才能使用getifaddrs()来收集所有的接口名称?

同一台机器上的套接字适用于Windows和Linux

与Windows和Linux上的命名pipe道和其他方法相比,在执行IPC时使用套接字的效率如何? 现在,我有4个独立的应用程序在4个独立的盒子需要沟通。 两个是在Windows Server 2003 R2上运行的.NET 3.5应用程序。 两个是Linux(Suse Linux 10)。 它们通常不受CPU限制。 stream量不是那么大,但是非常重要的是低延迟。 我们现在使用套接字,在Linux机器上安装了sles10慢启动补丁。 只要简单地在同一个窗口框中运行两个Windows应用程序,并在同一个Linux机器上运行两个Linux应用程序并且不进行代码更改(即仍然使用套接字),您认为我们可以获得多less速度提升。 请问操作系统是否意识到端点在同一台机器上,并且知道不要使用这些数据包出去以太网? 他们的数据包是否仍然需要通过整个networking栈? 如果我们花时间更改命名pipe道或内存映射文件或其他东西,速度会快多less?

服务器的单个端口(套接字)上的最大并发连接数

并发客户端(使用不同的端口号)的最大数量可以在同一端口(单个套接字)上与服务器通信的最大数量是多less? 什么是可能影响这个计数的因素? 我正在Linux环境中寻找这个信息和telnet。

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

我的应用程序在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 […]