Ошибка "неверный аргумент" в winsock при прослушивании - PullRequest
0 голосов
/ 28 октября 2018

Я пытался создать простое приложение для связи между клиентом и сервером, но столкнулся с проблемой - при прослушивании я получаю ошибку 10022 (неверный аргумент).

WSADATA wsaData;
int iResult;
sockaddr_in addr;
SOCKET sock, client;
addr.sin_family = AF_INET;
addr.sin_port = htons( 25565 );
addr.sin_addr.S_un.S_addr = inet_addr( "127.0.0.1" );

iResult = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );

if( iResult )
{
    std::cout << ( WSAGetLastError( ) );
    _getch( );
}

sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if( sock == INVALID_SOCKET )
{
    std::cout << ( WSAGetLastError( ) );
    _getch( );
}

iResult = listen( sock, SOMAXCONN );

if( iResult )
{
    std::cout << ( WSAGetLastError( ) );
    _getch( );
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Ответ содержится в listen() документации :

WSAEINVAL

Сокет не был связан с bind.

Вам нужно bind() сокет, прежде чем вы сможете listen() на нем.

0 голосов
/ 28 октября 2018

Перед тем, как listen, вам нужно bind подключить сокет к порту, который будет прослушиваться.

Похоже, вы уже создали структуру адресов, содержащую информацию, необходимую для bind, поэтому позвоните bind(sock, &addr, sizeof(addr)) и выполните соответствующую проверку ошибок перед вызовом listen.

Документация для bind

...