当前位置: 首页 > 面试题库 >

C ++如何使用select查看套接字是否已

陆沈浪
2023-03-14
问题内容

有人可以给我提供一个示例,说明如何使用select()查看客户端是否已关闭套接字上的连接吗?

仅供参考。我正在使用linux

谢谢!


问题答案:

下面的代码段首先检查套接字是否标记为可读(关闭时为已标记),然后检查是否确实有要读取的内容。

#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/ioctl.h>

bool isclosed(int sock) {
  fd_set rfd;
  FD_ZERO(&rfd);
  FD_SET(sock, &rfd);
  timeval tv = { 0 };
  select(sock+1, &rfd, 0, 0, &tv);
  if (!FD_ISSET(sock, &rfd))
    return false;
  int n = 0;
  ioctl(sock, FIONREAD, &n);
  return n == 0;
}


 类似资料:
  • 问题内容: 好吧,我是SQL的新手,我刚刚读到,存储过程始终返回一个值,确定该过程中的查询是否已成功执行是一种很好的做法。 所以我有一个带有select语句的简单存储过程,如果要执行,我想返回1,否则返回-1。 您能告诉我如何用SQL编写该条件吗? 如果有关系,我的数据库是MS SQL Server。 谢谢你。 问题答案: 使用输出参数返回成功状态以及Try..Catch块

  • 问题内容: 在Java中创建套接字时: 套接字构造函数将在返回之前尝试连接到 host:port 。在Windows上,对于无法访问的主机,此操作几乎立即失败,但是对于Linux,套接字可能最多需要5分钟才能超时。 我知道,如果我可以控制创建套接字,则可以执行以下操作: 但我希望操作系统使用合理的默认值。有没有办法在Linux上更改此设置? 谢谢 问题答案: 我想你要。默认值通常是5或6,大约需要

  • 问题内容: 我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定播放器何时连接。但是,似乎似乎很难确定玩家何时使用套接字API断开连接。 呼叫已断开远程似乎总是返回一个插座上。同样,调用已远程关闭的套接字似乎总是会返回。我读过要真正确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。我们只需要不断地通过

  • 问题内容: 我的代码需要读取所有文件。目前,我正在使用以下代码: 但是,如果文件当前为空,则为null,这是不好的。有没有一个具有方法或等同? 问题答案: 您尝试执行的标准模式是:

  • 目前,我支持具有以下体系结构的客户机,用于工业制造过程: 我已经在PC上设置了一个WAMP服务器和一个示例网页,我可以在PC上的任何浏览器上看到它作为“本地主机”。我知道如何通过WebView类向Android应用程序添加web浏览器视图。 但是我不知道如何让手机上的浏览器通过TCP连接看到PC上的WAMP服务器。我怎么把这两件事联系起来?

  • 套接字接口 结构体 struct   fd_set   文件句柄管理 更多...   类型定义 typedef struct fd_set  fd_set   文件句柄管理   函数 int  socket (int domain, int type, int protocol)   创建套接字   int  bind (int s, const struct sockaddr *name, so