当网络连接不可用时,防止发送UDP数据

时间:2011-05-13 12:58:42

标签: c udp

我有一个C应用程序,每隔几秒就会向UDP服务器发送一次数据。如果客户端丢失了几分钟的网络连接然后恢复连接,它将把所有累积的数据发送到服务器,这可能导致一百个或更多请求同时从该客户端进入服务器。

如果在使用UDP传输期间发生错误,有没有办法阻止从客户端发送这些消息?来自UDP客户端的connect调用是否有助于确定客户端是否可以连接到服务器?或者只能使用TCP?

int socketDescriptor; 
struct sockaddr_in serverAddress;

if ((socketDescriptor = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
    printf("Could not create socket. \n");
    return;
}
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr(server_ip);
serverAddress.sin_port = htons(server_port);

if (sendto(socketDescriptor, data, strlen(data), 0, 
                  (struct sockaddr *)&serverAddress, sizeof(serverAddress)) < 0)
{  
   printf("Could not send data to the server. \n");
   return;
}

close(socketDescriptor);

2 个答案:

答案 0 :(得分:2)

听起来你得到的行为来自在socket sndbuf中缓冲的数据报,如果无法立即发送这些数据报,你会希望删除这些数据报吗?

如果是这种情况,你可能很幸运将sndbuf的大小设置为零。

警示语 - 这一行为区域听起来非常接近“特定于实施”的领域。

答案 1 :(得分:0)

正如here所解释的那样,为了检索UDP上的错误,您应该先使用connect,然后使用send方法,但在Linux上它似乎具有相同的行为,无论是否有connect