Funciones de sockets en C

Slides:



Advertisements
Presentaciones similares
CAPA DE TRANSPORTE MODELO OSI
Advertisements

Curso de Java Java – Redes Rogelio Ferreira Escutia.
Capa 4 Capa de Transporte
Nau Gran dHivern Intr. a la creación y gestión de páginas web Introducción a la web.
Page 1 Martínez Navarro, Germán Fco. Page 2 Índice Introducción Paquetes Cuerpo del mensaje Circuitos Sistema de mensajes Arquitectura del cliente Arquitectura.
Internet y tecnologías web
TEMA1. Servicios de Red e Internet
Telecomunicaciones Internet.
Con el comando netstat (Network status) mostrará información sobre la configuración y actividad de la red.
© 2007 Cisco Systems, Inc. All rights reserved. Traducido en apoyo a la capacitación de Instructores de la Red Proydesa Comunicación por la red Fundamentos.
Programación Interactiva Aplicaciones Cliente-Servidor
CAPA DE TRANSPORTE DEL MODELO OSI
Capa de Transporte.
Trabajo Practico Grupo 1 NFS – TCP - UDP
INF 1400: Redes de Computadores
TEMA 2 Técnicas básicas de construcción de aplicaciones distribuidas
Sockets y Threads en JAVA
PROTOCOLOS Y ESTANDARES DE RED
Capítulo 20: TCP Servicio de transporte confiable
Trabajar en una pequeña o mediana empresa o ISP. Capítulo 7
SOCKETS INTRODUCCIÓN DEFINICIÓN TIPOS DE SOCKETS USO DE SOCKETS.
CAPA DE RED DEL MODELO DE REFERENCIA OSI
Protocolos de transporte y aplicación
Ingeniería en Automática Industrial Software para Aplicaciones Industriales I Ingeniería en Automática Industrial Software para Aplicaciones Industriales.
Capa de transporte.
Servidor.pl #!/usr/local/bin/perl use Socket; ($port) $port = 2345 unless $port; Empleamos el módulo Socket, equivalente a las definiciones que.
PASOS PARA EL FORMATEO DE UN PC
MODELO TCP/IP Conectividad de extremo a extremo especificando como los datos deberian ser formateados,direccionados,transmitidos,enrutados y recibidos.
Servidor de Batalla Naval.
MODELO TCP/IP.
Aspectos básicos de networking: Clase 5
1 Uciel Fragoso RodríguezITAMRedes TCP/IP Protocolo TCP (Transmission Control Protocol)
TCP/IP V4 Redes de Computadoras uclv.
SERVICIO DHCP Mª Begoña Castells 2º S.M.R.. Cuestiones de repaso IP.- Código que identifica una interfaz o dispositivo dentro de una red TCP/IP Es un.
INTEGRANTES: MARTINEZ MISHELL MEDINA ENID MENENDEZ EVELYN INTEGRANTES: MARTINEZ MISHELL MEDINA ENID MENENDEZ EVELYN.
PROTOCOLO DE TRANSPORTE Profesor Daniel Díaz Ataucuri Introducción
Universidad Nacional de Luján - Asignatura Teleinformática y Redes Tema: Capa de Transporte - TCP 1 Capa de Transporte “Ofrece a sus usuarios un sistema.
LISTAS DE CONTROL DE ACCESO (ACL)
1 Chat de salón 1.Enunciado del problema 2.Modelo cliente/servidor 3.Protocolo de comunicación con el servidor. 4.Chat privado 5.Diseño del cliente 6.Diseño.
TCP Tema 2.- Nivel de transporte en Internet Dr. Daniel Morató Redes de Computadores Ingeniero Técnico en Informática de Gestión, 2º curso Material parcialmente.
Sistemas de Comunicación Magistral Nro. 8 Capa 4: Transporte Las funciones principales de la capa de transporte son transportar y regular el flujo de información.
Funciones Capa de Transporte
Conceptos avanzados Dr. Daniel Morató Area de Ingeniería Telemática Departamento de Automática y Computación Universidad Pública de Navarra
SOCKETS.
AXEL LATORRE GABRIEL VALENZUELA GIAN PAOLO ALMEIDA ROMMEL CHIFLA ISABEL VILLEGAS INTEGRANTES.
TCP/IP Introducción TCP/IP Introducción. TCP/IP vs OSI Aplicación Presentación Sesión Transporte Red Enlace Física Aplicación Acceso a la red Física TCP/IP.
CAPITULO 6 CAPA DE TRANSPORTE
Fundamentos de TCP/IP.
1 Capítulo 21: Interacción Cliente Servidor ICD 327: Redes de Computadores Agustín J. González.
ELO3091 Interfaz de Socket Agustín J. González ELO309.
Capa Transporte3-1 Capítulo 3: Capa transporte ELO322: Redes de Computadores Agustín J. González Este material está basado en el material preparado como.
Modelo TCP / IP Conjunto de protocolos. La sigla TCP/IP significa "Protocolo de control de transmisión/Protocolo de Internet" y se pronuncia "T-C-P-I-P".
Capítulo 7: Capa de transporte
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
Redes de Datos Integrantes: Guízar Gómez Gerardo Nassir López Ortega Juan Manuel Rodríguez Castro Ronald Michel Silva Rangel Ángel Eduardo Capa 5. Sesión.
Conceptos de protocolos de red
File Transfer Protocol.
Protocolos del modelo TCP/IP
Ing. Elizabeth Guerrero V.
Ing. Elizabeth Guerrero V.
Protocolos de Transporte y Aplicación. – TCP y UDP
Tema 1 – Introducción a las Redes informáticas
Nivel de Transporte en Internet
PROTOCOLOS Modelo TCP/IP
Ing. Horacio sagredo tejerina
Gabriel Montañés León. TCP es un protocolo orientado a conexión es decir, que permite que dos máquinas que están comunicadas controlen el estado de la.
Modelo OSI Para redes………
UD 2: “Instalación y administración de servicios de configuración automática de red” Protocolo DHCP Luis Alfonso Sánchez Brazales.
Protocolos de Transporte y Aplicación
Protocolos de Transporte y Aplicación Javier Rodríguez Granados.
Transcripción de la presentación:

Funciones de sockets en C Prácticas 4 y 5 (versión 2012-2013)

Protocolos de transporte de Internet El Nivel de Transporte en Internet Protocolos de transporte de Internet Se encargan del transporte de los datos extremo a extremo (host a host). Hay dos protocolos para dos tipos de servicio: TCP (Transmission Control Protocol): orientado a conexión. Garantiza la entrega sin pérdidas, descarte de duplicados, etc. UDP (User Datagram Protocol) : no orientado a conexión. No garantiza la entrega, equivale en el nivel de transporte al servicio que ofrece IP en el nivel de red. En un host hay una sola instancia de TCP y una de UDP, que dan servicio a todas las aplicaciones que lo soliciten TCP y UDP se encargan de multiplexar el tráfico de los procesos a nivel de aplicación mediante los números de puertos. Redes

El Nivel de Transporte en Internet Especificación del protocolo de transporte 32 bits Versión Lon. Cab. DS (DiffServ) Longitud Total Identificación Res. DF MF Desplazam. de Fragmento Tiempo de vida (TTL) Protocolo Checksum Dirección de origen Dirección de destino Opciones (de 0 a 40 octetos) Valor Protocolo 1 ICMP 4 IP 6 TCP 17 UDP 89 OSPF Protocolos de transporte Redes

El Nivel de Transporte en Internet Cabeceras UDP y TCP 32 bits Puerto de origen Puerto de destino Longitud datagrama UDP Checksum (opcional) Cabecera UDP Puerto de origen Puerto de destino Número de secuencia Número de acuse de recibo Cabecera TCP L. Cab. (4 bits) Resv. (4 bits) Flags (8 bits) Tamaño ventana Checksum Puntero datos urgentes Opciones Relleno Flags: 7º: SYN: indica el inicio de una conexión 8º: FIN: indica el final de una conexión Redes

El Nivel de Transporte en Internet Puertos y Servidores Los puertos se identifican por un número entero de 16 bits (rango de 0 a 65535) Cada paquete lleva un puerto de origen y uno de destino (como las direcciones IP) Los puertos 0 a 1023 están reservados para los servicios ‘bien conocidos’, por ejemplo: puerto 80 → servicio web (HTTP) de esta forma los clientes web (o lo que sea) saben a que puerto han de dirigir sus peticiones Algunas aplicaciones usan TCP, otras UDP. Algunas usan ambos, dependiendo del tipo de operación Redes

Algunos servicios ‘bien conocidos’ El Nivel de Transporte en Internet Algunos servicios ‘bien conocidos’ Servicio Puerto TCP UDP DayTime 13 X FTP 21 SSH 22 TelNet 23 SMTP 25 Domain (DNS) 53 BOOTP 67 HTTP 80 POP3 110 NTP 123 SNMP 161 HTTPS 443 Redes

El Nivel de Transporte en Internet Multiplexación Nivel de aplicación HTTP (Puerto 400) Servicio no estándar Múltiples instancias (una o varias por protocolo) FTP (Puerto 21) HTTP (Puerto 80) Telnet (Puerto 23) SMTP (Puerto 25) Nivel de transporte Checksum Dos instancias (TCP y UDP) P. dest. (23) DATOS APLICACIÓN Cabecera TCP Checksum Nivel de red Una instancia IP (puede haber otros protocolos) Prot. (6) SEGMENTO TCP Cabecera IP Nivel de enlace Múltiples instancias (una por interfaz) Ethertype (0800) DATAGRAMA IP CRC Cabecera MAC Ethernet Redes

El Nivel de Transporte en Internet Puertos de Clientes A diferencia de los servidores, los clientes usan números de puerto elegidos arbitrariamente por el sistema operativo, pero siempre con valores superiores al 1023, para no coincidir con los servidores que pueda haber en ese host A los puertos elegidos por los clientes se les suele llamar puertos ‘efímeros’ ya que, a diferencia de puertos de servidores, suelen tener una vida muy corta (la de la conexión) La mayoría de los sistemas operativos no utilizan para los puertos efímeros todo el rango posible (1024-65535) sino sólo una parte Redes

El Nivel de Transporte en Internet Sockets La combinación de una dirección IP y un número de puerto identifica un punto de conexión del nivel de transporte. Es lo que llamamos un ‘socket’ Ejemplo de socket: 10.0.1.25 : 80 Podemos considerar el socket como la dirección completamente especificada: Av. Blasco Ibáñez 78 – 5ª puerta Dirección IP Puerto Socket Dirección IP Puerto Socket Redes

El Nivel de Transporte en Internet Comunicación entre dos sockets Socket 10.0.1.25.80 (rojo = ‘LISTEN’) Socket: 10.0.2.47.1038 Conexión TCP 10.0.1.25.80-10.0.2.47.1038 Puerto 80 Puerto 1038 El ordenador ejecuta el programa ‘Explorer’ IP 10.0.1.25 IP 10.0.2.47 Servidor Web Cliente Conexión de un cliente a un servidor web Redes

Práctica 4: Programa cliente TCP Se trata de hacer un programa que establezca una conexión al puerto 13 (servicio daytime) de un servidor. La dirección IP se especificará en tiempo de ejecución. Cuando la conexión se establece el servidor devuelve una cadena de caracteres que contiene la fecha y hora, y cierra la conexión El cliente debe leer la cadena recibida y mostrarla por pantalla

El Nivel de Transporte en Internet Conexión TCP al puerto 13 (daytime) TCP Servidor (daytime, puerto 13) TCP Cliente Función CLOSED LISTEN SYN-SENT Quiero conectar contigo (SYN) SYN-RECEIVED Vale, acepto la invitación (SYN) Conexión ESTABLISHED ¡Ya estamos conectados!  Tiempo ESTABLISHED connect Mando datos: bytes 1-26 (fecha-hora) Intercambio de datos Bytes 1-26 recibidos OK Quiero desconectar (FIN) FIN-WAIT-1 CLOSE-WAIT LAST-ACK Vale, de acuerdo (FIN) TIME-WAIT Desconexión ¡Adiós! close . . . CLOSED . 2- 4 min. . LISTEN Redes

Como ver las conexiones TCP Comando netstat: nos permite ver que conexiones TCP que tenemos activas en un momento dado (socket origen – socket destino) y el estado en que se encuentran. También nos muestra si tenemos algún puerto a la escucha (modo LISTEN) Programa wireshark: nos permite capturar los paquetes enviados y recibidos, pudiendo analizar su contenido con todo detalle, el momento en que se envían, etc.

Comando ‘netstat’ en un host El Nivel de Transporte en Internet Comando ‘netstat’ en un host C:\>netstat -n Conexiones activas Proto Dirección local Dirección remota Estado TCP 10.0.1.25:3719 10.0.1.60:21 ESTABLISHED TCP 10.0.1.25:4111 10.0.1.50:110 TIME_WAIT TCP 10.0.1.25:4113 10.0.1.50:110 TIME_WAIT TCP 10.0.1.25:80 10.0.1.40:1056 ESTABLISHED TCP 10.0.1.25:80 10.0.1.30:2312 ESTABLISHED TCP 10.0.1.25:80 *:* LISTEN C:\> IP remota Puerto local Puerto remoto IP local Servidor web a la escucha en este host Conexión de clientes con el servidor web de este host Sesión pendiente de cerrar de un cliente de correo de este host con 10.0.1.50 Conexión de un cliente ftp de este host con 10.0.1.60 Si no se utiliza la opción ‘–n’ el programa netstat intenta convertir las direcciones IP y los puertos a nombres siempre que puede (por ejemplo pone ‘pop3’ en vez de 110) Redes

Diferencia entre Protocolo e Interfaz Protocolo: Reglas que rigen la comunicación entre dos procesos que se ejecutan en dos sistemas diferentes en la misma capa del modelo OSI. Para asegurar su interoperabilidad es necesario estandarizarlos. Ejemplos de protocolos: IPv4 (RFC 791), TCP (RFC 793), HTTP (RFC 2616) Interfaz: Reglas que rigen la comunicación entre dos procesos en capas consecutivas dentro del mismo sistema. Pueden no ser estándar, pero su estandarización permite la portabilidad de software entre sistemas de distinta arquitectura. Normalmente la Interfaz se especifica y estandariza mediante una API (Interfaz de Programación de Aplicaciones) que es una librería de funciones para la comunicación entre procesos. En TCP/IP las APIs más utilizadas derivan de la librería “Berkeley sockets” escrita en C, que apareció en el Unix BSD 4.2 en 1983. Esta API permite utilizar desde el nivel de aplicación los servicios del nivel de transporte.

El Nivel de Red en Internet. Aspectos básicos Protocolos e Interfaces Protocolo Interfaz HTTP A A Sockets BSD Sockets BSD TCP T T IP IP IP R R R R E E E E F F F F Cliente Router Router Servidor Redes

Porgrama cliente TCP (Daytime) Tarea: Valor entero que identifica el socket Indica protocolo IP Indica protocolo TCP 1: Creamos el socket (no se envía nada) n = socket ( PF_INET , SOCK_STREAM , 0) Dir. IP y puerto a conectar 2: Conectamos con el servidor (se intercambian 6 paquetes) connect ( n , (struct sockaddr *)&s ,sizeof(struct sockaddr_in)) Variable donde se recogen los datos recibidos El servidor acepta la conexión, devuelve la fecha/hora y cierra. 3: Leemos los datos recibidos (no se envía nada) read ( n , buffer ,TAM_BUFFER) 4: Cerramos el socket (se intercambian 2 paquetes) close ( n )

Estructura sockaddr_in struct in_addr { unsigned long int s_addr; }; struct sockaddr_in int sin_family; unsigned short int sin_port; struct in_addr sin_addr; La dirección IP se guarda en un entero largo (32 bits) en todas las arquitecturas Campos: El número de puerto se guarda en un entero corto (16 bits) struct sockaddr_in s; ... s.sin_family=PF_INET; s.sin_port= htons (13); if ( inet_aton (“147.156.13.25”,&s.sin_addr)==0) error(sock,"inet_aton"); Ejemplo de uso: Funciones de conversión Uso TCP: connect( n , (struct sockaddr *)&s ,sizeof(struct sockaddr_in)) Uso UDP: sendto ( n , NULL ,0,0, (struct sockaddr *)&s , sizeof(struct sockaddr_in)

Comentarios al programa cliente TCP El entero que devuelve la función socket no tiene nada que ver con el número de puerto del cliente y del servidor. Es un identificador de ese socket elegido por el sistema de ficheros (normalmente el 3). socket no establece ninguna conexión ni transmite ningún paquete, solo prepara el socket local para la conexión connect establece la conexión TCP. Para ello ha de indicar la dirección IP y puerto, es decir el socket remoto con el que queremos conectar. Si connect no da error podemos estar seguros de que la conexión ha funcionado. El programa elige el socket remoto (IP y pueto) pero no el local. La IP es la de la interfaz y el puerto (efímero) lo elige el sistema operativo. connect provoca el intercambio de 6 paquetes (de SYN a FIN). read no transmite nada, su efecto es puramente local. close provoca el envío del FIN por parte del cliente y la confirmación del servidor. Cierra la conexión liberando los recursos reservados en socket. Si en el mismo programa quisiéramos hacer una segunda conexión deberíamos llamar a socket de nuevo

Práctica 4: Programa cliente UDP El cliente envía un datagrama UDP al puerto 13 del servidor. A continuación se queda bloqueado durante un tiempo (por defecto un segundo) a la espera de la respuesta Si antes de agotar el tiempo se recibe la respuesta el programa muestra por pantalla el contenido (la fecha y la hora) y termina Si no se recibe respuesta dentro del tiempo previsto el programa indica ‘timeout’ y termina

El Nivel de Transporte en Internet Intercambio de paquetes UDP al puerto 13 UDP Servidor (daytime, puerto 13) UDP Cliente LISTEN Datagrama vacío Mando datos  Tiempo (fecha-hora) Redes

Porgrama cliente UDP (Daytime) Tarea: Valor entero que identifica el socket Indica protocolo IP Indica protocolo UDP 1: Crear el socket n = socket ( PF_INET , SOCK_DGRAM , 0) Datagrama vacío Dir. IP y puerto de destino 2: Enviar datagrama vacío sendto ( n , NULL ,0,0, (struct sockaddr *)&s , sizeof(struct sockaddr_in) Conjunto de sockets de lectura Tiempo de espera 3: Esperar respuesta select( n +1, &conjunto ,NULL,NULL, &timeout ) Variable donde se recogen los datos recibidos El servidor recibe el datagrama y devuelve la fecha/hora. 4: Leer la respuesta recv( n , buffer , TAM_BUFFER,0) close ( n ) 5: Cerrar el socket

Comentarios al programa cliente UDP socket prepara el socket local, pero no manda ningún paquete ni especifica el socket remoto (dirección IP y puerto) sendto envía el datagrama UDP. En ella indicamos la dir. IP y puerto de destino, es decir el socket al que queremos enviar el paquete En ningún momento indicamos nuestro socket (el del cliente) en el programa. La IP es la nuestra y el puerto (efímero) lo elige el sistema operativo La correcta ejecución de sendto no demuestra que el paquete haya llegado a su destino, solo que ha salido. Podría no existir la IP de destino, o estar cerrado el puerto 13 en ese host y sendto terminaría sin error Con select nos ponemos a esperar la respuesta. El valor que devuelve select puede ser: Negativo, es que se ha producido algún error Cero, es que se ha agotado el tiempo sin recibir respuesta Positivo, es que se ha recibido alguna respuesta. En ese caso para leerla debemos utilizar recv

Estructura timeout (en select) struct timeval { unsigned long int tv_sec; /* Segundos */ unsigned long int tv_usec; /* Millonesimas de segundo */ }; Campos: Ejemplo de uso: timeout.tv_sec=1; timeout.tv_usec=0; Timeout 1 segundo Uso en la select: select ( n +1, &conjunto ,NULL,NULL, &timeout )

Arquitecturas big-endian y little-endian Los procesadores big-endian representan los enteros colocando primero el byte más significativo. Los procesadores little-endian lo hacen al revés. Ejemplo: Un ’short int’ (16 bits) con valor 13 en big-endian es 0x000D Un ’short int’ con el valor 13 en little-endian es 0x0D00 Internet utiliza siempre formato big-endian Las funciones htons, htonl, ntohs y ntohl se encargan de convertir los datos en caso necesario. De este modo los programas son independientes de la arquitectura utilizada En un sistema big-endian estas funciones no hacen nada, pero debemos usarlas siempre para que los programas funcionen en todos los casos de forma transparente

Funciones de conversión de enteros En la estructura sockaddr_in se manejan dos tipos de enteros: Cortos (16 bits) para los números de puerto. Largos (32 bits) para las direcciones IP. Las funciones htons y ntohs (htonl/htons) realizan la conversión host->red o red->host en cada caso Los números de puerto, cuando se imprimen o muestran por pantalla se representan como un entero de 16 bits, por lo que no es necesaria ninguna conversión adicional. Sin embargo las direcciones IP se suelen representar como cuatro enteros de 8 bits separados por puntos. Las funciones inet_aton e inet_ntoa se encargan de las conversiones necesarias. Ejemplo: printf (“Dir. IP: %s %d\n” inet_ntoa (2476477461) ) genera: Dir. IP: 147.156.12.21

Funciones de conversión Nombre largo Nombre corto Ejemplo host to network short htons s.sin_port= htons (13); network to host short ntohs printf (“Puerto: %hu, %d\n” ntohs (s.sin_port) ) host to network long htonl s.sin_addr.s_addr = htonl (INADDR_ANY) network to host long ntohl host = ntohl (direccion) internet ASCII to network inet_aton inet_aton (“147.156.12.21”,&s.sin_addr) internet network to ASCII inet_ntoa printf (“Dir. IP: %s %d\n” inet_ntoa (s.sin_addr) )

Programa servidor TCP Se trata de hacer un servidor del protocolo IRC (Internet Relay Chat). Cuando un cliente envía un mensaje de texto el servidor lo difunde a todos los clientes conectados en ese momento El puerto utilizado para ofrecer el servicio se elegirá en tiempo de ejecución Cuando un cliente se conecta se le asigna un socket (valor entero elegido por el sistema) que le identifica. Los valores de los sockets no tienen por que ser correlativos ni crecientes Para llevar control de los clientes conectados el programa guarda en una lista o vector los sockets asignados: Cuando se conecta un nuevo cliente añade un elemento a la lista Cuando un cliente se desconecta quita su elemento y compacta el resto de la lista

Programa servidor TCP: inicialización Tarea: 1: Crear el socket n = socket ( PF_INET , SOCK_STREAM , 0) INADDR_ANY y puerto 2: Asociarle un puerto bind( n , (struct sockaddr *)&s , sizeof(struct sockaddr_in) 3: Ponerlo en modo ‘listen’ listen( n ,5) 4: Esperar conex. nuevas select ( n + 1 , &conjunto , NULL , NULL , &timeout ) Conjunto de sockets de lectura Una vez ejecutada la select, si todo ha ido bien ya deberíamos ver el puerto correspondiente en modo LISTEN con el netstat

Comentarios a la inicialización del programa servidor TCP socket solo prepara las cosas reservando los recursos, como siempre. bind asocia un determinado número de puerto con ese socket, y una dirección IP. El puerto es el que hemos elegido para proveer el servicio, y como no queremos restringirlo a una IP concreta ponemos como dirección INADDR_ANY. De esta manera aceptamos cualquier IP. listen pone el puerto indicado en bind en modo LISTEN. select deja el programa a la espera de nuevas conexiones, pero solo hasta agotar el tiempo marcado en &timeout. El programa no puede quedarse eternamente esperando nuevas conexiones, pues también ha de hacer otras cosas

Programa servidor TCP: conexión y lectura de un cliente Tarea: 4: Esperar conex. nuevas select ( n + 1 , &conjunto , NULL , NULL , &timeout ) Socket creado para el cliente IP y puerto del cliente 5: Aceptar una conexión ncon(i) = accept ( n , (struct sockaddr *)&s , &cod ) 6: Preparar para leer select ( maxncon +1, &conjunto , NULL , NULL , &timeout ) 7: Leer (hay que buscar el socket que nos ha mandado datos, la select no nos lo dice) i=0; while (i<*num) { if ( FD_ISSET ( ncon[i] , &conjunto )) cod=read(ncon[i],buffer[cont],TAM_TEXTO) } i++; Macro para averiguar si un socket se ha visto afectado por la select

Macros FD utilizadas en ‘select’ FD_ZERO Inicializa el conjunto FD_SET Añade un socket al conjunto FD_CLR Borra un socket del conjunto FD_ISSET Comprueba si un socket ha sido afectado por la select fd_set conjunto; struct timeval t; FD_ZERO(&conjunto); for(i=0;i<num;i++) { FD_SET(ncon[i],&conjunto); }

Programa servidor TCP: escritura en los clientes Tarea: Conjunto de sockets de escritura 8: Preparar para escribir select ( maxncon + 1 , NULL , &conjunto , NULL, &timeout ) 9: Escribir (en todos los clientes) i=0; while (i<*num) { if (FD_ISSET(ncon[i],&conjunto)) cod= write ( ncon[i] , buffer ,strlen) } i++; 10: Cerrar la conexión de un cliente close ( ncon[i] )

Programa servidor TCP: Cierre de la conexión de un cliente Cuando leemos datos de un cliente con la función read el valor devuelto indica el número de bytes leídos. Si devuelve 0 significa que el cliente ha cerrado la conexión: nbytes = read ( ncon[i] ,buffer ,TAM_TEXTO ); if (cod==0) close ( ncon[i] );

Ejecución del Programa servidor TCP Durante su ejecución el programa servidor está en un bucle sin fin que llama consecutivamente a dos funciones: AceptarConexion Leer La salida de cada función se produce bien, porque se ha hecho la tarea prevista (aceptar conexión o leer) o porque se ha agotado el timeout de la select. ¿Qué ocurre si en la select ponemos un timeout grande, por ejemplo de 10 segundos? ¿Y si ponemos uno muy pequeño, por ejemplo un microsegundo?