fd_set是一个用于表示一组文件描述符的数据结构,通常在使用select函数进行多路复用时使用。它本身并不存储套接字的IP地址,而是用于告知操作系统在指定的一组套接字上进行监视。
要获取套接字的IP地址,需要借助套接字的文件描述符。在Linux系统中,可以通过调用getsockname函数来获取套接字的本地IP地址和端口号,通过调用getpeername函数来获取套接字的远程IP地址和端口号。
下面是获取本地IP地址和端口号的示例代码:
#include <sys/types.h>
#include <sys/socket.h>
#include #include <netinet/in.h>
#include <arpa/inet.h>
// 假设fd是套接字的文件描述符
struct sockaddr_in addr;
socklen_t addr_len = sizeof(addr);
getsockname(fd, (struct sockaddr*)&addr, &addr_len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr.sin_addr), ip, INET_ADDRSTRLEN);
int port = ntohs(addr.sin_port);
同样地,可以通过类似的方式获取远程IP地址和端口号:
#include <sys/types.h>
#include <sys/socket.h>
#include #include <netinet/in.h>
#include <arpa/inet.h>
// 假设fd是套接字的文件描述符
struct sockaddr_in addr;
socklen_t addr_len = sizeof(addr);
getpeername(fd, (struct sockaddr*)&addr, &addr_len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr.sin_addr), ip, INET_ADDRSTRLEN);
int port = ntohs(addr.sin_port);
请注意,这只是获取套接字的IP地址的一种方式,具体的实现可能因编程语言和操作系统而有所不同。此外,如果使用的是IPv6地址,需要使用inet_ntop函数的AF_INET6参数来获取IP地址。
小程序云开发官方直播课(应用开发实战)
技术创作101训练营
小程序·云开发官方直播课(数据库方向)
小程序·云开发官方直播课(数据库方向)
腾讯云GAME-TECH沙龙
云+社区技术沙龙[第10期]
云+社区开发者大会 武汉站
云+未来峰会
云+社区技术沙龙 [第30期]
云+社区技术沙龙[第21期]
领取专属 10元无门槛券
手把手带您无忧上云