Documente Academic
Documente Profesional
Documente Cultură
SocketsenIPv6
Sockets
en IPv6
SocketsMulticast
Th d (hilos)
Threads
(hil )
08/05/2014
SocketsenIPv6:estructuras
Estructuradedireccionesdesockets enIPv6(definidasen<netinet/in.h>)
/*IPv6address */
struct in6_addr{
union {
uint8 t u6_addr8[16];
uint8_t
u6 addr8[16];
uint16_tu6_addr16[8];
uint32_tu6_addr32[4];
}
}in6_u;
_
};
struct sockaddr_in6{
uint8 t sin6 len;
uint8_tsin6_len;
/* Longitud de esta estructura*/
/*Longituddeestaestructura*/
sa_family_t sin6_family; /*AF_INET6*/
in_port_t sin6_port;
/*Transport layer port #*/
uint32_tsin6_flowinfo;
/*IPv6flow information */
struct in6_addrsin6_addr; /*IPv6address */
uint32_tsin6_scope_id;
/*IPv6scopeid*/
};
SocketsenIPv6:crearyasociar
y
/*Declaracin*/
int s;
struct sockaddr_in6myaddr_in6;
/*Creacin*/
s=socket(AF_INET6,SOCK_STREAM,0);
/*Inicializacin*/
myaddr_in6.sin6_family=AF_INET6;
myaddr_in6.sin6_addr=in6addr_any;
dd i 6 i 6 dd
i 6 dd
myaddr_in6.sin6_port=htons(13);
/*Asociacin */
bind(s,(struct sockaddr *)&myaddr_in6,sizeof(myaddr_in6));
SocketsenIPv6:cambiosdeformato
Cambiosdeformatoendirecciones(<arpa/inet.h>)
o int inet_p
pton(int
(
af,const
,
char *src,void
,
*dst);
);
ConviertedireccionesIPv4(AF_INET)eIPv6(AF_INET6)detextoaformatobinario
(estructuradedireccindered)
Reemplazaainet_aton
Reemplaza a inet aton yainet_addr
y a inet addr
o const char *inet_ntop(int af,const void *src,char *dst,socklen_t size);
ConviertedireccionesIPv4eIPv6deformatobinarioatexto
Reemplazaainet_ntoa
l
Ejemplo:
char equipo[INET6_ADDRSTRLEN];
equipo[INET6 ADDRSTRLEN];
unsigned char cliaddr[sizeof(struct in6_addr)];
inet_ntop (AF_INET6,cliaddr,equipo,sizeof(equipo));
EjemplodesocketsIPv6defechayhoradisponible
enDiaweb
Redes de Computadores II - Grado en Ingeniera Informtica
Descripcin
AF_INET
Protocolos IPv4
AF_INET6
Protocolos IPv6
AF_LOCAL (AF_UNIX)
AF_ROUTE
Sockets de encaminamiento
AF_KEY
Sockets de clave
AF_NS
AF_ISO
Protocolos de OSI
Tipo
Descripcin
SOCK_STREAM
Sockets stream
SOCK_DGRAM
Sockets datagrama
SOCK_RAW
Procesado propio
SOCK PACKET
SOCK_PACKET
SOCK_SEQPACKET
AF_INET6
AF_LOCAL
SOCK_STREAM
TCP
TCP
SI
SOCK_DGRAM
UDP
UDP
SI
SOCK_RAW
IPv4
IPv6
AF_ROUTE
AF_KEY
SI
SI
SOCK SEQPACKET
SOCK_SEQPACKET
AF_OSI
AF_NS
SI
SI
Interoperatividad
p
IPv4eIPv6(I)
()
Basefundamental
o Sustituir
Sustituirllamadasagethostbyname
llamadas a gethostbyname ygethostbyaddr
y gethostbyaddr porgetaddrinfo
por getaddrinfo y
y
getnameinfo entreotras(<sys/types.h>,<sys/socket.h>y<netdb.h>)
Funcionesparagarantizarinteroperabilidad
o int getnameinfo (const struct sockaddr *sa,socklen_t salen,char *node,
socklen_t nodelen,char *serv,socklen_t servlen,unsigned int flags)
Resuelveelnombrededominiodadaladireccin
Combinalasfuncionalidadesdegethostbyaddr ygetservbyport
IPv6
client
IPv4
client
TCP
TCP
IPv6
server
TCP
IPv6 address
IPv4 mapped
IPv6 address
IPv6
IPv4
IPv4
IPv6
206.62.226.42
Data
D
t
link
Data
D
t
link
Data
D
t
link
Enet
Type 0800 hdr
IPv4
hdr
TCP
hdr
5flb:df00:ce3
e:e200:20:80
0:2b37:6426
TCP
data
dport 8888
IPv6
Enet
hdr
hdr
Type 86dd
TCP
hdr
TCP
data
dport 8888
IPv4
sockets
IPv6
sockets
AF_INET
AF_INET
SOCK_DGRAM
SOCK_STREAM
sockaddr in
sockaddr_in
sockaddr in
sockaddr_in
AF_INET6
AF_INET6
SOCK_STREAM
SOCK_DGRAM
sockaddr_in6
k dd i 6
sockaddr_in6
k dd i 6
UDP
TCP
IPv4 mapped
Address
returned by
y
accept or
recvfrom
IPv4
IPv6
IPv4
IP 4 ddatagram
IPv4
IP 6
IPv6
IPv6 datagram
10
11
IPv4
sockets
IPv6
sockets
AF_INET
AF_INET
SOCK_DGRAM
SOCK_STREAM
sockaddr in
sockaddr in
AF_INET6
AF_INET6
SOCK_STREAM
SOCK_DGRAM
sockaddr in6
sockaddr_in6
sockaddr in6
sockaddr_in6
UDP
TCP
IPv4 mapped
IPv6
Address
for connect
or sendto
IPv4
IPv6
IPv4
IPv4 datagram
g
IPv6
v
IPv6 datagram
g
12
Ejemplo
j p
ServidoryclientedefechayhoraTCPyUDPdisponibleenla
plataformadelaasignatura
13
Aplicacionesmulticast
p
conSockets
Multicast
o Mediantelasfuncionessetsockopt ygetsockopt conlas
siguientesopciones
Orden
Tipodedato
Descripcin
IP_ADD_MEMBERSHIP
IPV6_ADD_MEMBERSHIP
struct ip_mreq
Unirse a un grupo multicast
struct ipv6_mreq
IP_DROP_MEMBERSHIP
IPV6_DROP_MEMBERSHIP
struct ip_mreq
Abandonar un grupo multicast
struct ipv6_mreq
IP_MULTICAST_IF
IPV6_MULTICAST_IF
struct in_addr
IP_MULTICAST_TTL
IPV6_MULTICAST_HOPS
u char
u_char
IP_MULTICAST_LOOP
IPV6_MULTICAST_LOOP
u_char
Habilitar o deshabilitar
loopback
14
Aplicacionesmulticast
p
conSockets(I)
()
Emisormulticast (Servidor)
Crear
CrearelsocketAF_INET(AF_INET6)ydel
el socket AF INET ( AF INET6) y del
tipoSOCK_DGRAM
Inicializarlaestructurasockaddr_in (
sockaddr_in6)connuestrapropiaIPy
_
p p
y
nmerodepuertoefmero
ActivarIP_MULTICAST_LOOP(
IPV6_MULTICAST_LOOP)enelsocketsise
d
desearecibirtambincopiadelos
ibi
bi
i d l
datagramasenviadosalgrupomulticast
Configurarsifueranecesariolainterfazpor
la que se enviarn los datagramas con la
laqueseenviarnlosdatagramasconla
opcinIP_MULTICAST_IF(
IPV6_MULTICAST_IF)
EnviareldatagramaalaIPmulticast
g
yy
nmerodepuertodenuestraaplicacin
(conocidopornuestrosclientes)rellenando
unaestructurasockaddr_in (
sockaddr in6)
sockaddr_in6)
Suscriptormulticast (Cliente)
Crear
CrearelsocketAF_INET(AF_INET6)y
el socket AF INET ( AF INET6) y
deltipoSOCK_DGRAM
ActivarlaopcinSO_REUSEADDRpara
permitirvariossuscriptoresenlamisma
p
p
mquina
Deestaformasepuedenrecibirdatagramas
destinadosalmismonumerodepuerto
Usar
Usarbind
bind paraespecificarelnmerode
para especificar el nmero de
puertodenuestraaplicacine
INADDR_ANY(in6addr_any)para
recibirdatagramas
UtilizarIP_ADD_MEMBERSHIP(
IPV6_ADD_MEMBERSHIP)para
especificarelgrupomulticast delquese
desean recibir datagramas y
deseanrecibirdatagramasy
opcionalmenteporquinterfazsiel
equipotienevarias(estructura
pv6_mreq)
p
_
q)
Recibirlosdatagramas
15
Aplicacionesmulticast
p
conSockets(II)
( )
Extractodecdigodeuninalgrupomulticast enunadeterminadainterfaz
...
#defineGRUPOMULTICASTV6"ff15::33
#defineINTERFAZeth0
...
struct ipv6_mreqipv6mreq;
...
ipv6mreq.ipv6mr_interface=if_nametoindex(INTERFAZ);
/*Convierteladireccinmulticast abinario*/
if(inet_pton(familia,GRUPOMULTICASTV6,&ipv6mreq.ipv6mr_multiaddr)==1)
{
perror(Llamada inet pton\n");
perror(Llamadainet_pton\n");
exit(1);
}
/*Unirsealgrupomulticast
/*
U i
l
lti
t */
if(setsockopt(s,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,&ipv6mreq,sizeof(ipv6mreq))==1)
{
perror(Llamadasetsockopt paramulticast\n");
exit(1);
}
Redes de Computadores II - Grado en Ingeniera Informtica
16
Aplicacionesmulticast
p
conSockets(yIII)
(y )
Extractodecdigoparaespecificarlainterfazporlaquedifundir
...
#defineINTERFAZeth0
...
int interfaz;
...
interfaz=if_nametoindex(INTERFAZ);
/*Difundirporunainterfazdeterminada*/
if(setsockopt(s,IPPROTO_IPV6,IPV6_MULTICAST_IF,(char *)&interfaz,sizeof(interfaz)))==1)
{
perror(Llamada setsockopt paraespecificarinterfazdedifusin");
perror(Llamadasetsockopt
para especificar interfa de dif sin");
exit(1);
}
17
Funcionesdegestindeaplicacionesde
multidifusin mcast XXX
multidifusinmcast_XXX
Funcionesdeutilidadenaplicacionesmultidifusin(fuente
originaldellibroUnixNetworkProgramming)
o
o
o
o
o
o
o
o
ProgramasfuentesdellibroUnixNetworkProgramming
P
f
t d l lib U i N t
kP
i
o Pulseparadescargardelsitioweboficialdellibro
o PulseparadescargardelrepositoriodeprcticasdelDIAWEB
P l
d
d l
it i d
ti d l DIAWEB
Redes de Computadores II - Grado en Ingeniera Informtica
18
Threads (I)
()
Problemasdefork
o Lamemoriasecopiadepadresahijos,todoslosdescriptoresse
duplican
o SenecesitanmecanismosdeIPCparapasarinformacinentre
padresehijosdespusdefork
Solucin=Threads (hilos)
o Todoslosthread deunprocesocompartenlamismamemoriaglobal
o Lacreacindeunthread puedeserentre10100vecesmsrpida
quelacreacindeunproceso
o ProblemaSincronizacin
19
Threads (II)
( )
Todoslosthread comparten
Instruccionesdelosprocesos
Datos
Ficherosabiertos
Manejadoresyestadodelas
j
y
seales
Directorioactualdetrabajo
Iddeusuarioygrupo
Id d
i
CadaThread tienesupropio
Iddethread
Conjuntoderegistros,
Conjunto de registros
incluyendocontadorde
programaypunterodepila
Pila(paravariableslocalesy
retornodedirecciones)
errno
Mscaradeseales
Prioridad
20
Threads (III)
( )
Existendostiposdethread
o Enelespaciodeusuario
En el espacio de usuario
o Enelkernel
pthread_create
pthread_join
pthread_self
pthread_detach
pthread_exit
pthread_attr_*
pthread_mutex_*
pthread cond *
pthread_cond_
pthread_rwlock_*
pthread_cancel
creaunthread
esperaelfinaldeunthread
devuelveeliddethread
elthread finalizaporsmismo
finalizaunthread
atributosdelthread
usoexclusivodeunthread aunrecurso
espera por una condicin
esperaporunacondicin
accesocompartidoparaleeryexclusivoparaescribir
pidelacancelacindeunthread
21
Threads (IV)
( )
#include <stdio.h>//hola.c
#include <pthread.h>
void holamundo (
(void *ptr){
p ) {
printf("HolaMundo\n");
}
int main(int
(
argc,char
g ,
*argv[]){
g []) {
pthread_t hilo1;
int estado;
/*handler,atributosdelthread,funcin,argumentosdelafuncin*/
g
estado=pthread_create(&hilo1,NULL,(void *)&holamundo,NULL);
if (estado!=0)
printf ("ErroralcrearelThread\n");
estado=pthread_join(hilo1,NULL);
if (estado!=0)
printf("Thread unida\n");
return 0;
}
#makefile
LIBS=lpthread
hola:hola.o
$(CC)$(CFLAGS)$@.co$@$(LIBS)
Redes de Computadores II - Grado en Ingeniera Informtica
22