title: winsock error 10022 in listen
body: <p>Here is my first question in this great website.</p>
  
  <p>I am writing a simple server, obtaining the port number form the user:</p>
  
  <pre><code>#include &lt;winsock2.h&gt;
  #include &lt;ws2tcpip.h&gt;
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;cstring&gt;
  
  class socketConexion { 
  private: 
      WSADATA wsaData; 
      int iResultado; 
      SOCKET socketServidor = INVALID_SOCKET;  socket servidor 
      SOCKET socketCliente = INVALID_SOCKET; 
      struct sockaddr *clienteSockaddr;
      struct addrinfo *socketResultado = NULL;
      struct addrinfo datosServidor;
      std::string puertoUsuario;
      char clienteIPV4[LONG_IPV4];
  public:
      int iniciarWinsock () { 
          iResultado = WSAStartup(MAKEWORD(2,2), &amp;wsaData);
          printf ("Inicializando Winsock2 \n");
          if (iResultado != 0) { 
              printf ("Error al iniciar Winsock2: %d\n", iResultado);
              return 1;
          else {
              printf ("Winsock2 Inicializado\n");
              return 0;
          }
      }
      int obtenerDirServidor () {
          printf ("Introduzca puerto: ");
          std::cin &gt;&gt; puertoUsuario;
          printf ("Obteniendo datos de servidor.\n");
          ZeroMemory(&amp;datosServidor, sizeof(datosServidor));
          datosServidor.ai_family = AF_INET;
          datosServidor.ai_socktype = SOCK_STREAM;
          datosServidor.ai_protocol = IPPROTO_TCP;
          datosServidor.ai_flags = AI_PASSIVE;
          iResultado = getaddrinfo(NULL, (const char*)puertoUsuario.c_str(), &amp;datosServidor, &amp;socketResultado);
          if (iResultado != 0) {
              printf ("Error al obtener dirección de servidor: %d\n", iResultado);
              WSACleanup();
              return 1;
          }
          else {
              printf ("Dirección de servidor obtenida.\n");
              return 0;
          }
      }
      int socketBind () {
          socketServidor = socket(socketResultado-&gt;ai_family, socketResultado-&gt;ai_socktype, socketResultado-&gt;ai_protocol);
          if (socketServidor == INVALID_SOCKET) {
              printf ("Error al crear socket: %d\n", WSAGetLastError ());
              freeaddrinfo (socketResultado);
              WSACleanup();
              return 1;
          }
          else {
              printf ("Socket creado correctamente.\n");
              return 0;
          }
          iResultado = bind(socketServidor, socketResultado-&gt;ai_addr, (int)socketResultado-&gt;ai_addrlen);
          if (iResultado == SOCKET_ERROR) {
              printf ("Error al direccionar socket: %d\n", WSAGetLastError());
              freeaddrinfo (socketResultado);
              closesocket(socketServidor);
              WSACleanup();
              return 1;
          }
          else {
              printf ("Socket direccionado correctamente. \n");
              return 0;   
          }
          freeaddrinfo (socketResultado);
      }
      int socketListen (){
          iResultado = listen(socketServidor, SOMAXCONN);
          if (iResultado == SOCKET_ERROR) {
              printf ("Error al poner socket a la escucha socket: %d\n", WSAGetLastError());
              closesocket(socketServidor);
              WSACleanup();
              return 1;
          }
          else {
              printf ("Esperando conexión..... %d\n");
              return 0;
          }
           .....
  </code></pre>
  
  <p>I get the error 10022 when calling listen function, and I can't see the invalid argument I am passing to the function.</p>