Aceptar una conexión (Windows Sockets 2)
Una vez que el socket escucha una conexión, el programa debe controlar las solicitudes de conexión en ese socket.
Para aceptar una conexión en un socket
Cree un objeto SOCKET temporal denominado ClientSocket para aceptar conexiones de clientes.
SOCKET ClientSocket;
Normalmente, una aplicación de servidor se diseñaría para escuchar las conexiones de varios clientes. En el caso de los servidores de alto rendimiento, se suelen usar varios subprocesos para controlar las conexiones de varios clientes.
Hay varias técnicas de programación diferentes con Winsock que se pueden usar para escuchar varias conexiones de cliente. Una técnica de programación consiste en crear un bucle continuo que comprueba si hay solicitudes de conexión mediante la función de escucha (consulte Escuchar en un socket). Si se produce una solicitud de conexión, la aplicación llama a la función accept, AcceptEx o WSAAccept y pasa el trabajo a otro subproceso para controlar la solicitud. Se pueden realizar otras técnicas de programación.
Tenga en cuenta que este ejemplo básico es muy sencillo y no usa varios subprocesos. El ejemplo también escucha y solo acepta una única conexión.
ClientSocket = INVALID_SOCKET; // Accept a client socket ClientSocket = accept(ListenSocket, NULL, NULL); if (ClientSocket == INVALID_SOCKET) { printf("accept failed: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return 1; }
Cuando se ha aceptado la conexión de cliente, una aplicación de servidor normalmente pasaría el socket de cliente aceptado (la variable ClientSocket en el código de ejemplo anterior) a un subproceso de trabajo o un puerto de finalización de E/S y continuaría aceptando conexiones adicionales. En este ejemplo básico, el servidor continúa con el paso siguiente.
Hay una serie de otras técnicas de programación que se pueden usar para escuchar y aceptar varias conexiones. Entre ellas se incluyen el uso de las funciones select o WSAPoll . Algunos ejemplos de estas diversas técnicas de programación se muestran en los ejemplos avanzados de Winsock incluidos con el Kit de desarrollo de software (SDK) de Microsoft Windows.
Nota
En los sistemas Unix, una técnica de programación común para los servidores era para que una aplicación escuche las conexiones. Cuando se aceptó una conexión, el proceso primario llamaría a la función de bifurcación para crear un nuevo proceso secundario para controlar la conexión de cliente, heredando el socket del elemento primario. Esta técnica de programación no se admite en Windows, ya que no se admite la función de bifurcación . Esta técnica tampoco suele ser adecuada para servidores de alto rendimiento, ya que los recursos necesarios para crear un nuevo proceso son mucho mayores que los necesarios para un subproceso.
Paso siguiente: Recibir y enviar datos en el servidor
Temas relacionados