【发布时间】:2023-04-09 17:24:01
【问题描述】:
我设置了客户端/服务器,我希望我的客户端知道服务器是否已接受连接。否则我的客户不知道它仍在等待被接受。我不能依靠进一步的通信(协议规范)来验证这一点。因此,例如,从服务器向客户端发送“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);
...
【问题讨论】:
-
如果没有接受,说明没有连接,在客户端会超时。你需要另一个连接来做你想做的事,这只会解决问题。为了发送它没有接受,它需要接受连接才能做到......
-
在任何情况下检查系统调用的返回值都是一个好主意。如果这样表示错误,检查
errno的值,如果手册页声明它设置为错误,将提供更多启发。 -
我已经检查了所有内容,为简洁起见,它们没有包括在内。
标签: c linux sockets unix-socket