如何检查套接字的另一端是否已被接受?

vas*_*cop 3 c sockets linux unix-socket

我设置了客户端/服务器,我希望我的客户端知道服务器是否已接受连接。否则我的客户不知道它仍在等待被接受。我不能依赖进一步的通信(协议规范)来验证这一点。因此,例如,从服务器向客户端发送“Good to go”字符串就不是一个选项。是否有一个标志或其他东西可以让我检查服务器是否确实正在接收?一些示例代码如下:

/* Client */
...
getaddrinfo(ip, port, &hints, &servinfo);
connect(sockfd, info->ai_addr, info->ai_addrlen);

if (info == NULL) {
    printf("connection failure\n");
    exit(1);
}

inet_ntop(info->ai_family, get_in_addr((struct sockaddr *)info->ai_addr), ipstring, sizeof(ipstring));
printf("Connected to %s!\n", ipstring);
...

/* Server */
...
pause(); /* If don't accept the connection, how to make the client know? */ 
new_fd = accept(sockfd, (struct sockaddr *)&cli_addr, &addr_size);
...
Run Code Online (Sandbox Code Playgroud)

SKi*_*SKi 5

由于积压,服务器可以在接受呼叫之前发送 SYN-ACK。所以客户端调用connect()可以在服务器调用之前返回accept()

正如您所说:来自服务器的“Good to go”消息不是选项。怎么样:“回显”来自客户端的请求。所以服务器接受后就会响应。

如果 TCP 流中的任何额外流量不是一个选项。可以使用辅助数据吗?