Здравствуйте!
Столкнулся с такой вот проблемой: написал сервер на C++(Windows), встроил IOCP. Все работает, но вот такая беда: надо получать инфу о клиенте, а именно реальный IP адрес (char *) и порт (int)... А проблема вот в чем: следуя логике IOCP я не использую Accept/WSAAccept, а использую AcceptEx, после того, как создал клиентский сокет... Вот на неко как раз и вызываю AcceptEx.
Естественно sockaddr_in структура не заполняется...
Нашел вот что: GetAcceptExSockaddrs(...). Функция заполняет 2 sockaddr и 2 int(в Unix — socklen_t)...
Внедрил — не работает.
void OnAcceptCallback(TcpClient *client)
{
sockaddr *pLocal = NULL, *pRemote = NULL;
int nLocal = 0, nRemote = 0;
GetAcceptExSockaddrs(&client->_ex_buffer, 0, sizeof(sockaddr_in) + 16, sizeof(sockaddr_in) + 16, &pLocal, &nLocal, &pRemote, &nRemote);
/*...*/
}
Этот callback срабатывает, но nLocal и nRemote остаются нулями, а pLocal и pRemote — неправильные указатели...
В client->_ex_buffer данные приходят, размер его = (sizeof(sockaddr_in) + 16) * 2, и я дебаггером увидел 127.0.0.1, а вот порта не увидел...
Вот и вопрос: как можно получить ip-адрес и порт, используя IOCP?
Спасибо!