2010-02-25 10 views
21

¿Qué son los zócalos Async? ¿Cómo son diferentes de los enchufes normales (bloqueo y no bloqueo)?¿Qué son los zócalos Async?

Cualquier apunta en esa dirección o cualquier enlace a tutoriales será útil.

Gracias.

Respuesta

26

Hay tres maneras de comunicarse con tomas en modo asíncrono:

  1. toma regular de abierto, pero no leen de ella (porque read() bloques) hasta que sepa que hay algo que leer. Puede usar select() o poll() para verificar si hay datos para leer desde el socket (s), y si hay algo, léalo, ya que read() no se bloqueará.

  2. Cambie el socket a la E/S sin bloqueo, estableciendo O_NONBLOCK con la función fcntl(). En este caso, read() no bloqueará.

  3. O_ASYNC bandera de llaves de vaso usando FIOASYNC opción de ioctl() (ver man 7 socket para más detalles). En este caso, recibirá la señal SIGIO cuando haya algo que leer en el zócalo.

Third approach is async socket.

+1

Th También hay, probablemente, otras formas específicas de plataforma para utilizar sockets de forma asíncrona, como el uso de E/S superpuestas y puertos de finalización de E/S en plataformas Windows. –

+0

@Len Sure. Incluso estos no son multiplataforma, ya que 'fcntl()' puede tener diferentes opciones en diferentes plataformas, y 'ioctl()' no es estándar y depende en gran medida de la plataforma. – qrdl

+2

¿Hay una opción independiente de plataforma? – Juan

2

Si un servidor usa un socket síncrono, mientras espera datos del cliente, su hilo principal está bloqueado, por lo que el servidor no hará nada ... eso es malo si tiene varios clientes conectados. En un socket asíncrono, PUEDE hacer otras cosas mientras espera que el cliente le envíe datos, por lo que ahora PUEDE tener varios clientes conectados

Synchronous usa una función como receive() que bloquea hasta que recibe un mensaje

Asincrónico tiene beginReceive() endReceive() o funciones similares. Utiliza las devoluciones de llamada, cuando se recibe un mensaje, la devolución de llamada se invoca