gpt4 book ai didi

c - 如何确定客户端是否已连接到我的套接字?

转载 作者:行者123 更新时间:2023-12-02 03:13:50 26 4
gpt4 key购买 nike

我有代码调用打开 TCP 服务器套接字的库(在本例中为 gstreamer)。我有端口号,但我无权访问文件描述符。

我想从我的应用程序中检测当前是否有客户端连接到此端口。理想情况下,我想要一种跨平台方法(Linux + Mac,*BSD 加分)。

我知道 netstat 可以帮助我做到这一点,但我想要一种编程技术。

最佳答案

库代码在您进程的地址空间中运行。它使用的文件描述符只是 int 值,您可以使用 getsockopt() 来查找 TCP/IP 套接字,然后使用 getpeername() 在那些套接字上找到连接的套接字。根据 POSIX 文档 for getsockopt()getpeername() :

#include <sys/socket.h>

// probably better to use getrlimit() here...
#define MAX_FD 1024

int tcp_socket_fds[ MAX_FD ];
struct sockaddr_in peers[ MAX_FD ];

for ( int fd = 0; fd < MAX_FD; fd++ )
{
int type;
int len = sizeof( type );

int rc = getsockopt( fd, SOL_SOCKET, SO_TYPE, &type, &len );
if ( ( 0 == rc ) && ( SOCK_STREAM == type ) )
{
tcp_socket_fds[ fd ] = 1;

socklen_t socket_len = sizeof( peers[ fd ] );
rc = getpeername( fd, &( peers[ fd ] ), &socket_len );

// zero out the peer if getpeername() failed
if ( 0 != rc )
{
memset( &( peers[ fd ], 0, sizeof( peers[ fd ] ) );
}
}
else
{
tcp_socket_fds[ fd ] = 0;
}
}

这将找到您的进程在检查时打开的所有连接的 TCP 套接字,并且它应该是相当可移植的。

关于c - 如何确定客户端是否已连接到我的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com