Tag: udp

如何在C中刷新UDP套接字的输入缓冲区?

如何在C中清除UDP套接字的输入缓冲区(如果存在这样的东西)? 我正在使用嵌入式Linux环境并使用C来创建一些本机应用程序。 这些嵌入式计算机中有几台位于同一网络上,当其中一台事件发生时(让我们称之为WHISTLE-BLOWER),WHISTLE-BLOWER应该向网络广播地址发送网络消息,以便所有机器都在网络(包括WHISTLE-BLOWER)知道事件并根据它执行一些操作。 我顺便使用UDP套接字…… 这是它的伪代码: main { startNetworkListenerThread( networkListenerFunction ); while( not received any SIGTERM or such ) { localEventInfo = checkIfTheLocalEventOccured(); broadcastOnNetwork( localEventInfo ); } } networkListenerFunction { bindSocket; while( not SIGTERM ) { // THIS IS WHERE I WANT TO FLUSH THE RECV BUFFER… recv_data = recvfrom( socket ); if( validate recv data […]

Windows 7中的UDP广播 – 它有用吗?

我正在尝试在Windows 7下编写一些代码,以便通过我的本地网络进行广播,并且无法获得以下代码。 我来自Linux背景,所以对风格道歉 – 完整的代码编译等工作,如果我使用的地址: unsigned long broadcastAddr = inet_addr(“192.168.10.0”) | ~(inet_addr(“255.255.240.0”)); 然后工作正常,我只是想使用首选的INADDR_BROADCAST / 255.255.255.255方法。 SOCKET sockfd; int broadcast = 1; WSADATA wsaData; // Windows socket // Initialize Winsock if (WSAStartup(MAKEWORD(2,2), &wsaData) == SOCKET_ERROR) { perror(“WinSock Error”); getc(stdin); exit(EXIT_FAILURE); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { perror(“Socket Error”); getc(stdin); exit(1); } if […]

Winsock UDP数据包被丢弃了吗?

我们在Windows中通过UDP设置建立了客户端/服务器通信系统。 我们面临的问题是,当吞吐量增长时,数据包将被丢弃。 我们怀疑这是由于UDP接收缓冲区不断被轮询导致缓冲区被阻塞并丢弃任何传入的数据包。 是否有可能读取此缓冲区将导致传入的数据包被丢弃? 如果是这样,有什么选择来纠正这个? 该系统是用C语言编写的。请告诉我这是否过于模糊,我可以尝试提供更多信息。 谢谢!

如何忽略自己的广播udp数据包

对于以下我假设一张网卡。 我有一个程序的组件,旨在让子网中的其他人知道它的存在。 为此,我实现了一个解决方案,无论何时程序启动(以及之后定期)它都会向INADDR_BROADCAST发送广播 – 无论谁收听所需的端口,都会记住它来自哪里供以后使用。 这个问题是我不想记住我自己的广播。 我认为理论上这很容易做 – 只需找出本地ip并与recvfrom内容进行比较。 但是,我发现很难获得本地IP:带有NULL的getaddrinfo返回127.0.0.1 ,带有主机名的getaddrinfo返回公共IP。 任何人都可以指向我找到实际的子网IP的方向? 我想我必须错过一些非常明显的东西但是……我还是错过了:) 注意:我已经阅读了有关广播的其他SO问题,特别是这一个: 所有接口上的UDP-Broadcast,但我尚未解决多接口问题。

UDP套接字集超时

我试图在UDP套接字上设置100ms超时。 我正在使用C.我在下面发布了我的代码的相关部分。 我不确定为什么这不是超时,但只是在它没有收到段时挂起。 这仅适用于未使用bind()方法绑定的套接字吗? #define TIMEOUT_MS 100 /* Seconds between retransmits */ if ((rcv_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) DieWithError("socket() failed"); if ((rcv_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) DieWithError("socket() failed"); //set timer for recv_socket static int timeout = TIMEOUT_MS; setsockopt(rcv_sock, SOL_SOCKET, SO_RCVTIMEO,(char*)&timeout,sizeof(timeout)); if(recvfrom(rcv_sock, ackBuffer,sizeof(ackBuffer), 0, (struct sockaddr *) &servAddr2, &fromSize) < 0){ //timeout […]