1 Sockets
2 Definición de Socket Punto de comunicación entre procesos.Descriptor de socket.
3 Características de un socket
4 Dominio de un socket Formato de direcciones y protocolosDominio UNIX (AF_UNIX) :
5 Dominio de un socket Dominio Internet (AF_INET) : struct in_addr{u_long s_addr; }; struct sockaddr_in{ short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8];
6 Dominio de un socket Valores de la estructura: AF_INETIPPORT_TCP, IPPORT_TELNET; IPPORT_RESERVED. INADDR_ANY
7 Tipo de un socket Propiedades de comunicaciónFiabilidad de la transmisión. Conservación del orden de los datos. No duplicación de datos. Comunicación en modo conectado. Conservación de los límites de los mensajes. Envío de mensajes <
8 Tipo de un socket Tipos disponibles SOCK_DGRAM. Propiedad 5. UDP.SOCK_STREAM. Propiedades 1-4. Propiedad 6. TCP. SOCK_RAW. Superusuario. IP.
9 Creación y Supresión de un Socketint socket (dominio, tipo, protocolo) int dominio; int tipo; int protocolo; Supresión: close
10 Enlazamiento socket-direcciónPrimitiva bind: int bind (sock, p_direccion, lg) int sock; struct sockaddr *p_direccion; int lg;
11 Enlazamiento socket-direcciónEl dominio Unix: ls, rm sockunix.c (hoja 5 de Sockets) El dominio Internet: gethostname, gethostbyname, INADDR_ANY getservbyname, IPPORT_RESERVED
12 Enlazamiento socket-direcciónint getsockname (sock, p_adr, p_lg) int sock; struct sockaddr *p_adr; int *p_lg; crearsock.c (hoja 7 de Sockets)
13 Comunicación por datagramasSockets tipo SOCK_DGRAM Poca fiabilidad Comunicación modo no conectado Posible <
14 Envío de mensajes int sendto (sock, msg, lg, opcion, p_dest, lgdest)int sock; char *msg; int lg; int opcion; struct sockaddr *p_dest; int lgdest;
15 Envío de mensajes int sendmsg (sock, msg, opcion) int sock;struct msghdr msg[]; int opcion;
16 Envío de mensajes struct msghdr { caddr_t msg_name; int msg_namelen;struct iovec *msg_iov; int msg_iovlen; caddr_t msg_accrights; int msg_accrightslen; };
17 Envío de mensajes struct iovec { caddr_t iov_base; int iov_len; };msghdr en
18 Recepción de mensajes int recvfrom (sock, msg, lg, opcion, p_exp, p_lgexp) int sock; char *msg; int lg; int opcion; struct sockaddr *p_exp; int *p_lgex;
19 Recepción de mensajes int recvmsg (sock, msg, opcion) int sock;int sock; struct msghdr msg[]; int opcion;
20 Cliente/Servidor El Servidor:Creación y enlace al puerto de servicio de un socket. Desconexión del servidor de su terminal de lanzamiento o ejecución. Bucle infinito en el cual el servidor: Espera una petición. La trata. Pone la forma de respuesta. Envía la respuesta.
21 Cliente/Servidor El Cliente: Creación del socket local.Preparación de la dirección del servidor. Envío del mensaje. Espera del resultado. Explotación del resultado.
22 Ejemplo Cliente/ServidorEjemplo Completo (hoja 11 de Sockets). Estructura hostent en netdb.h struct hostent{ char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; #define h_addr h_addr_list[0] };
23 Pseudoconexiones Primitiva connect: int connect (sock, p_adr, lgadr)int sock; struct sockaddr *p_adr; int lgadr;
24 Pseudoconexiones Primitiva socketpair:int socketpair (dominio, tipo, protocolo, p_sock) int dominio; int tipo; int protocolo; int *p_sock;
25 Pseudoconexiones Primitiva send: int send (sock, msg, lg, opcion)int sock; char *msg; int lg; int opcion;
26 Pseudoconexiones Primitiva recv: int recv (sock, msg, lg, opcion) int sock; char *msg; int lg; int opcion;
27 Comunicación modo conectadoFiabilidad Circuito virtual telnet, ftp, rlogin
28 socket/bind listen accept forkCreación y enlace del socket de escucha socket/bind Apertura del servicio listen Espera de demanda de conexión accept Servidor en modo conectado Creación de un subproceso fork PADRE HIJO Tratamiento de la demanda
29 Punto de vista del servidorint listen (sock, nb) int sock; int nb; int accept (sock, p_adr, p_lgadr) int sock; struct sockaddr *p_adr; int *p_lgadr;
30 Creación (y eventualmente enlace de un socket) socket/bindConstrucción de la dirección del servidor Demanda de conexión connect Cliente en modo conectado Fallo Éxito Diálogo con el servidor
31 Punto de vista del clienteint connect (sock, p_adr, lgadr) int sock; struct sockaddr *p_adr; int lgadr;
32 Diálogo servidor/clienteLa emisión: int write (sock, msg, lg) int sock; char *msg; int lg;
33 Diálogo servidor/clienteLa emisión: int send (sock, msg, lg, opcion) int sock; char *msg; int lg; int opcion;
34 Diálogo servidor/clienteLa recepción: int read (sock, msg, lg) int sock; char *msg; int lg;
35 Diálogo servidor/clienteLa recepción: int recv (sock, msg, lg, opcion) int sock; char *msg; int lg; int opcion;
36 Diálogo servidor/clienteEl corte de la conexión: int shutdown (desc, sens) int desc; int sens;