在侦听Winsock“无效参数”错误

时间:2018-10-28 19:13:38

标签: c++ winsock

我试图制作一个简单的客户端-服务器通信应用程序,但遇到一个问题-监听时出现错误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 :(得分:2)

listen之前,您需要bind套接字上要监听的端口。

您似乎已经建立了包含bind必要信息的地址结构,因此请调用bind(sock, &addr, sizeof(addr))并在调用listen之前执行适当的错误检查。

Documentation for bind

答案 1 :(得分:1)

答案在listen() documentation中:

  

WSAEINVAL

     

套接字未与bind绑定

您需要先bind()插入套接字,然后listen()才能插入它。