Я программирую сервер-клиентскую программу. На сервере я могу управлять своими клиентами через массив этой структуры данных:Как memcpy() struct sockaddr_in
struct Client
{
struct sockaddr_in addr;
/*...*/
};
struct Client CLIENTS[MAX_CLI];
Когда я получаю первый пакет от клиента через моего UDP
гнездо
struct sockaddr_in addr_cli;
memset(&addr_cli,0,sizeof(struct sockaddr_in));
b=recvfrom(SOCK_UDP_FATHER, &pdu, sizeof(pdu), MSG_DONTWAIT,
(struct sockaddr *)&addr_cli, (socklen_t *)&laddr_cli);
Я хочу, чтобы скопировать его адрес в моя структура. Так что я:
memcpy(&CLIENTS[client].addr,(struct sockaddr*)&addr_cli,
sizeof(struct sockaddr_in));
printf("IP client: %s",inet_ntoa(CLIENTS[client].addr.sin_addr);
Странным является то, что первая попытка связи не удается, печать 0.0.0.0
. Но следующая попытка, которую делает клиент, успешна, и все идет хорошо. Почему это происходит?
код вы показываете выглядит нормально, так что причина должна быть в другом месте. – alk
Листинг '(struct sockaddr *)' однако не нужен. – alk
Показать объявление 'addr_cli'. –