首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >能否以编程方式获取套接字的连接状态?

能否以编程方式获取套接字的连接状态?
EN

Stack Overflow用户
提问于 2022-08-11 19:12:53
回答 2查看 83关注 0票数 1

您可以使用netstat命令获得连接状态(连接状态类似于ESTABLISHEDTIME_WAIT,等等)。

但是,您能否以编程方式获得套接字的连接状态?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-11 19:27:26

您不能查询SOCKET本身所需的状态类型。

但是,您可以查询套接字的类型(TCP )和分配给它的IP/端口对(即通过getsockopt()状态,或者通过getsockopt(SO_TYPE) +getsockname()+getpeername()),然后可以枚举Windows的TCP/UDP表,直到找到与这些相同的详细信息匹配的条目为止,然后从该条目中获得状态。

查看以下枚举函数:

TCP:

UDP:

票数 2
EN

Stack Overflow用户

发布于 2022-08-11 19:28:14

在Windows上,您可以使用getsockopt()SO_BSP_STATE选项至少获取一些有关套接字状态的信息:

SO_BSP_STATE套接字选项返回套接字使用的本地地址、本地端口、远程地址、远程端口、套接字类型和协议。 若要执行此操作,请使用以下参数调用getsockopt函数。 表示此套接字选项的常量为0x1009。 语法 C++ int getsockopt( (套接字) s,//描述符标识套接字(int) SOL_SOCKET,// level (int) SO_BSP_STATE,// optname (char *) optval,//输出缓冲区,(int) *optlen,//输出缓冲区的大小); 参数 安在 标识套接字的描述符。 水平在 定义选项的级别。此操作使用SOL_SOCKET。 视光名 要检索值的套接字选项。此操作使用SO_BSP_STATE。 外视 指向要返回所请求选项的值的缓冲区的指针。此参数应指向等于或大于CSADDR_INFO结构大小的缓冲区。 进,出 指向optval缓冲区大小(以字节为单位)的指针。此大小必须等于或大于CSADDR_INFO结构的大小。 返回值 如果操作成功完成,getsockopt将返回零。 如果操作失败,则返回SOCKET_ERROR的值,并通过调用WSAGetLastError检索特定的错误代码。

一个结构定义作为

代码语言:javascript
复制
typedef struct _CSADDR_INFO {
  SOCKET_ADDRESS LocalAddr;
  SOCKET_ADDRESS RemoteAddr;
  INT            iSocketType;
  INT            iProtocol;
} CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO;
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73325810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档