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

标签 c linux sockets unix-socket

我有一个客户端/服务器设置,我想让我的客户端知道服务器是否接受了连接。否则我的客户不知道它还在等待被接受。我不能依靠进一步的沟通(协议(protocol)规范)来验证这一点。因此,例如从服务器向客户端发送“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);
...

最佳答案

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

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

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

关于c - 如何检查套接字的另一端是否已被接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10550219/

相关文章:

c++ - 从 C 到 C++ 的转换避免 <strsafe.h>

c - stat 函数不适用于子目录?

c - GNU 内置函数有哪些?

c# - 在 C++ 中使用 C# 库

c++ - 简单类中的 LNK2019 错误,看不出原因

c++ - 在 arm Debian 上加载共享库时出错

c - 为什么编译 K&R2 第 1 章的最长行示例时会出现 "conflicting types for getline"错误?

linux - 为什么container_of宏会阻止内核的其他部分修改结构体的唯一字段?

Java:如何让UDP套接字程序以阻塞I/O方式接收和发送?

c - 在套接字编程 C 中,将 Int 值写入服务器会将其转换为 -1