Re: TCP/IP ошибка инициализации
От: _monster_  
Дата: 19.01.04 18:58
Оценка:
Здравствуйте, __boolean, Вы писали:

__>

__>Во-первых, если порт уже занят, то почему-то getsockname не возвращает новый порт. Говорит 0.
__>[ccode]
__>getsockname(hSocket, (SOCKADDR*)&tcpaddr, &nLen);
__>nPort = ntohs(tcpaddr.sin_port);
__>


Не работает потому, что 3-й параметр функции getsockname имеет тип "значение-результат".Инициализируй его длиной структуры tcpaddr и будет тебе счастье.

__>Во-вторых, когда происходит accept, при вызове WSAAsyncSelect, выдается ошибка 10022(WSAEINVAL)


__>
__>    SOCKADDR_IN saddr;
__>    INT nsaddr = sizeof(SOCKADDR_IN); 
__>    SOCKET hAcceptSocket = accept(hSocket,(SOCKADDR*)&saddr, &nsaddr); 
__>    if(hAcceptSocket != INVALID_SOCKET)
__>                if(WSAAsyncSelect(hAcceptSocket , hWnd, WM_SOCK_NETEVENT, nEvent) == SOCKET_ERROR){
__>                     char szBuf[64];
__>                     sprintf(szBuf, "WinSocket.dll. WSAAsyncSelect %d", WSAGetLastError());
__>                     MessageBox(NULL, szBuf, "Внимание", MB_OK|MB_ICONERROR);
__>                }
__>


10022, как нетрудно убедиться, означает недопустимый аргумент. Поскольку в данном коде не видно, что хранят переменные hWnd, nEvent и что означает константа WM_SOCK_NETEVENT, то ничего определенного сказать нельзя. Скажу лишь, что набросал подобный код и у меня все работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.