Предыдущая | Оглавление | Следующая |
Получить адрес удаленного конца соединения
#include <sys/socket.h>
int getpeername(int s, struct sockaddr *addr, socklen_t *len);
Когда ты либо принял соединение через accept(), либо соединился с сервером через connect(), у соединения появляется второй конец (peer).
getpeername() возвращает struct sockaddr_in, заполненную информацией об удаленной машине.
Почему же тогда "name"? Есть куча разных видов сокетов, а не только Internet Sockets, которые используем мы, и "имя" было удобным обобщающим термином. В нашем случае, "имя" - это IP-адрес и порт.
Хотя функция возвращает длина адреса в len, нужно указать в len длину addr еще до вызова.
Возвращает ноль при успехе, -1 при ошибке, и сохраняет ее номер в errno.
int s; struct sockaddr_in server, addr; socklen_t len; // создаем сокет s = socket(PF_INET, SOCK_STREAM, 0); // соединяемся с сервером server.sin_family = AF_INET; inet_aton("63.161.169.137", &server.sin_addr); server.sin_port = htons(80); connect(s, (struct sockaddr*)&server, sizeof(server)); // получаем имя "собеседника" // мы только что соединились с 63.161.169.137:80, так что результат должен быть: // IP-адрес собеседника : 63.161.169.137 // Порт собеседника : 80 len = sizeof(addr); getpeername(s, (struct sockaddr*)&addr, &len); printf("IP-адрес собеседника : %s\n", inet_ntoa(addr.sin_addr)); printf("Порт собеседника : %d\n", ntohs(addr.sin_port)); |
Предыдущая | Оглавление | Следующая |