winsock "invalid argument" 监听错误
winsock "invalid argument" error on listen
我试图制作一个简单的客户端 - 服务器通信应用程序,但我遇到了一个问题 - 我在监听时收到错误 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( );
}
在 listen
之前,您需要 bind
将套接字连接到将被监听的端口。
看起来您已经构建了包含 bind
所需信息的地址结构,因此调用 bind(sock, &addr, sizeof(addr))
并在调用 listen
之前执行适当的错误检查。
WSAEINVAL
The socket has not been bound with bind
.
您需要 bind()
插座才能 listen()
它。
我试图制作一个简单的客户端 - 服务器通信应用程序,但我遇到了一个问题 - 我在监听时收到错误 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( );
}
在 listen
之前,您需要 bind
将套接字连接到将被监听的端口。
看起来您已经构建了包含 bind
所需信息的地址结构,因此调用 bind(sock, &addr, sizeof(addr))
并在调用 listen
之前执行适当的错误检查。
WSAEINVAL
The socket has not been bound with
bind
.
您需要 bind()
插座才能 listen()
它。