【linux下的UDP套接字编程】教程文章相关的互联网学习教程文章

Linux中的简单套接字转发

场景非常简单: 使用TCP / IP我有一个客户端连接到我(服务器)我想转发套接字发送给我的数据到我打开的另一个套接字和我从该套接字向后收到的数据.就像一个代理. 现在我有1个线程,一个人从传入连接中侦听,并在建立客户端连接时产生另一个2.我必须使用一种机制在线程中进行通信. 有什么更简单的我可以用来充当TCP / IP代理吗? Linux有套接字转发还是某种机制?解决方法:你不需要线程.看看select(),epoll()或kqueue(),以便在没有任何...

linux – 如何重新创建运行supervisord进程的缺少套接字【代码】

它经常发生在不同的盒子上,监督套接字文件由于某种原因消失了.没有调查这是因为错误或不同的原因,但我想知道是否可以重新创建/重新连接到由supervisord处理的这个套接字.进程仍在运行,我可以看到这一点> lsof -c supervisord COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME [...] superviso 16886 root 3w REG 9,1 85344 2753325 /var/log/supervisor/supervisord.lo...

Linux套接字缓冲区不平衡

我有一个简单的场景,其中两台服务器通过千兆链路连接.我在两侧运行iperf来测量吞吐量. 让我感到惊讶的是,每当我双向运行流量时,它总是只偏向一侧(例如?900Mbps与~100Mbps).如果我单向运行流量,则每侧获得~900Mbps. 如果我将其中一个服务器(较低内存)连接到另一个服务器,双向流量就会被平衡掉.所以绝对不是iperf的问题. 其他事实: >一台服务器有相当大的内存(~12GB),而另一台只有~4GB.>两个服务器都具有相同的TCP内存配置,在这种情...

Java Linux非阻塞套接字超时行为

我有一个Java非阻塞服务器,可以跟踪选择器中的所有套接字通道.然后我建立了500个与服务器的连接并定期发送数据.服务器接收的每条数据都会回显给客户端. 问题来自于测试工作几个小时,然后所有突然间服务器正在管理的所有套接字在尝试读取数据时抛出一个连接超时IOException. 我已经研究过客户端线程是否被饥饿(而不是发送数据),但我正在向客户端线程进行迭代,该线程遍历所有套接字并写出数据.交通似乎在不断流动,但过了一段时间它才...

linux – 在进程退出时自动清理PF_UNIX套接字?

是否有任何方法可以在创建它们的进程退出时自动清除UNIX域套接字?解决方法:如果您的应用程序只需要在Linux上运行,则可以使用抽象的unix套接字(路径以NULL字节开头的套接字).服务器进程结束时,将自动清除抽象套接字.

linux – git-daemon:“无法在主机(null)端口9418上分配任何侦听套接字”【代码】

在Debian挤压时,我收到syslog错误:unable to allocate any listen sockets on host (null) port 9418我也无法远程克隆. 文件/ etc / service / git-daemon / run:"$(git --exec-path)"/git-daemon --verbose --base-path=/var/cache/git --detach --syslog --reuseaddr --export-allnetstat -l | grep git输出:tcp 0 0 *:git *:* LISTEN tcp6 0 0 [::]:git ...

linux – 无法打开超过28234个套接字?【代码】

我正在写一个网络服务,我的目标是高并发性.出于某种原因,当我尝试连接到第28,234个插槽时,我得到:[Errno 99] Cannot assign requested address客户端是用python编写的,服务器端是用haskell编写的.我在ubuntu 11.04上运行它,并且:$ulimit -n 1048576我怎样才能克服这个限制?解决方法:通常的解决方法是在主机上创建额外的IP地址,只要将套接字绑定到接口,每个IP将根据dan_waterworth的答案获得额外的短暂端口范围. Microsoft在此处...

Linux服务器套接字 – 错误文件描述符【代码】

我在Linux下遇到服务器套接字问题.由于某些原因,我不知道服务器套接字消失了,并且在等待连接的select调用中出现Bad文件描述符错误.当我在另一个线程中关闭不相关的套接字连接时,总会发生此问题.这种情况发生在2.6.36内核的嵌入式Linux上. 有谁知道为什么会这样?服务器套接字可以简单地消失导致Bad文件描述符是正常的吗? 编辑:另一个套接字代码实现了VNC服务器并在完全不同的线程中运行.其他代码中唯一特别的东西是使用setjmp / ...

linux – 为什么套接字连接被阻止,TCP内核保留重传[ACK]数据包【代码】

我们面临的问题是,从一段时间后,特定的套接字连接被阻止,客户端的tcp内核不断重传[ACK]数据包. 拓扑流程如下:Client A ←→ Switch A ← Router A:NAT ← .. Internet .. → Router B:NAT → Switch B ←→ Server B以下是WireShark捕获的数据包:A)服务器1. 8013 > 6757 [PSH, ACK] Seq=56 Ack=132 Win=5840 Len=55 2. 6757 > 8013 [ACK] Seq=132 Ack=111 Win=65425 Len=0 B)客户//lines 3 and 4 are exactly the same ...

linux – 如何从/向SOCK_SEQPACKET套接字读/写?【代码】

我尝试使用SOCK_SEQPACKET套接字:int rc, len; int worker_sd, pass_sd; char buffer[80]; struct iovec iov[1]; struct msghdr msg;memset(&msg, 0, sizeof(msg)); memset(iov, 0, sizeof(iov));iov[0].iov_base = buffer; iov[0].iov_len = sizeof(buffer); msg.msg_iov = iov; msg.msg_iovlen = 1;if((socket_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0)) < 0) {perror("server: socket");exit -1; } mems...

Linux仅使用原始套接字接口【代码】

我的嵌入式系统有一个OpenWrt Linux发行版.该设备有3个网络接口:eth0,eth1和wlan0. 其中一个网络接口(eth0)应仅用于原始套接字编程.我能够使用参数AF_PACKET,SOCK_RAW,ETH_P_ALL创建一个套接字.套接字接收所有网络流量,我可以发送数据包,一切正常. 但我的问题是,操作系统还使用接口发送回收(例如ARP和ICMP请求/响应). 是否有任何选项只能由我的程序使用,而不是由操作系统本身使用?解决方法:使用香草内核无法实现这一点.但这可以接...

Linux中的同时套接字读/写(“全双工”)(特别是aio)【代码】

我正在移植构建在ACE Proactor框架之上的应用程序.该应用程序适用于VxWorks和Windows,但在使用librt的内核2.6.X.X的Linux(CentOS 5.5,WindRiver Linux 1.4和3.0)上无法运行. 我把问题缩小到一个非常基本的问题:应用程序在套接字上开始异步(通过aio_read)读取操作,然后在同一个套接字上开始异步(通过aio_write)写入.由于协议是从应用程序结束初始化的,因此无法实现读取操作. – 当套接字处于阻塞模式时,永远不会写入并且协议“挂起...

我可以在lxc(linux容器)中使用套接字作为stdin / stdout吗?

我有兴趣在lxc容器中启动一个守护进程,其stdin / stdout作为从主机inetd样式传递的套接字.这可能吗?解决方法:我不认为LXC有本机支持,但你总是可以在xinetd下运行你的lxc命令来获得你想要的东西.或者编写自己的服务器,在一侧与插座对话,并在另一侧与LXC(通过popen()或其他方式)进行对话.

Linux中的异步套接字 – 轮询与回调通过【代码】

在决定在我的简单服务器(linux)中实现异步套接字时,我遇到了一个问题.我打算继续poll(),并在调用之间做一些清理和缓存.现在这看起来很浪费,所以我做了更多的挖掘,并找到了一种可能在i / o上实现一些回调的方法. 如果我使用O_NONBLOCK创建套接字,使用SIOCSPGRP ioctl()在i / o上发送SIGIO,并使用sigaction()在i / o期间定义回调函数,是否会产生性能损失,更重要的是它是否有效. 另外,我可以为不同的套接字定义不同的功能吗?解决方法...

linux – 套接字,TCP状态和写入系统调用【代码】

我一直在使用一个简单的服务器,它每30秒向一个客户端发送一个心跳包,然后通过心跳回复包确认心跳.当我通过发送SIGKILL,SIGSEGV来粗暴地终止服务器时,客户端通过select()和read()系统调用很容易发现它.然后我开始想知道当你在客户端写入其心跳回复数据包之前这样做会发生什么,所以我在客户端代码中放置了20秒的睡眠并且同时杀死了服务器但发现客户端写入仍然成功.紧接着尝试第二次写入会触发预期的SIGPIPE信号并写入返回的EPIPE.据我...