winsock在哪里存储套接字的ip地址?

时间:2013-03-13 10:12:12

标签: c++ winsock

假设我有一个具有侦听套接字的简单winsock服务器,然后当接受连接时,它将套接字存储在套接字数组中(以允许多个连接)。 如何获取特定连接的IP地址?它是否存储在套接字句柄中?

2 个答案:

答案 0 :(得分:8)

只要套接字保持连接,就可以获得自己的套接字地址和对等套接字地址。

getsockname 会为您提供本地名称(即从您管道旁边) getpeername 会为您提供对等名称(即管道的远端)

此信息仅在打开/连接套接字时可用,因此如果可以在对等连接断开后使用它,最好将其存储在某处。

答案 1 :(得分:3)

是的,它存储在socketaddr_in结构中,您可以使用以下命令提取它:

SOCKADDR_IN client_info = {0};
int addrsize = sizeof(client_info);

// get it during the accept call
SOCKET client_sock = accept(serv, (struct sockaddr*)&client_info, &addrsize);

// or get it from the socket itself at any time
getpeername(client_sock, &client_info, sizeof(client_info));

char *ip = inet_ntoa(client_info.sin_addr);

printf("%s", ip);