IOCP получить порт и адрес
От: Alex_Logvinenko Украина  
Дата: 05.04.12 16:22
Оценка:
Здравствуйте!

Столкнулся с такой вот проблемой: написал сервер на 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?

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.