小编Rak*_*kad的帖子

C ( LINUX ) 中的非阻塞客户端套接字

我正在处理一项检查服务器上网络连接可用性的要求(如果网络稳定与否)。我有一个函数,它可以找到在中央服务器上注册的服务器。我通过提取服务器的 URL 和端口号并尝试通过表现得像一个简单的 TCP 客户端来连接到它们,为此功能添加了一层网络检查。如果返回值大于0,则表示网络工作正常;如果-1,则网络损坏。

通过这样的检查,当服务器的网络关闭时,我有时会观察到可变的不一致时间。这种行为的原因在链接中也有道理:时间不一致

为了解决这个问题,我有一个非阻塞客户端套接字的想法,它尝试连接到服务器。使用这种方法,我观察到的是,每次客户端连接到服务器时,connect() 函数的返回值始终为 -1。

我计划监视 connect() 函数最多 5 秒,如果失败,它应该发送否定响应。

我想要实现的目标:如果服务器可用,连接=0,然后中断它,否则等待 2 秒,如果仍然没有响应,则得出超时结论。

printf("--Checking for network connectivity--\n");
        for(size_t i = 0; i < serverOnNetworkSize; i++) {
           UA_ServerOnNetwork *server = &serverOnNetwork[i];
           A[i] = (char *)UA_malloc(server->discoveryUrl.length+1);
           memcpy(A[i],server->discoveryUrl.data,server->discoveryUrl.length);
           A[i][server->discoveryUrl.length] = 0;
           int length = strlen(A[i]);
          
          //discovery URLs are of the form : opc.tcp://hostname:port
          
          //new addition to extract port
            B[i] = A[i] + 10;
          //printf("Hostname: %s\n", B[i]);
            char *p = strrchr(B[i], ':');
            int port = strtoul(p+1, NULL, 10); …
Run Code Online (Sandbox Code Playgroud)

c sockets tcp nonblocking

1
推荐指数
1
解决办法
80
查看次数

标签 统计

c ×1

nonblocking ×1

sockets ×1

tcp ×1