Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los datos fuera de banda (OOB) son un canal de transmisión lógicamente independiente asociado a un par de sockets de flujo conectados. Los datos de OOB se pueden entregar al usuario independientemente de los datos normales. La abstracción define que las instalaciones de datos de OOB deben admitir la entrega confiable de al menos un bloque de datos OOB a la vez. Este bloque de datos puede contener al menos un byte de datos y al menos un bloque de datos OOB puede estar pendiente de entrega al usuario en cualquier momento. Para los protocolos de comunicaciones que admiten señalización en banda (es decir, TCP, donde los datos urgentes se entregan en secuencia con los datos normales), el sistema extrae normalmente los datos OOB del flujo de datos normal y los almacena por separado (dejando un hueco en el flujo de datos normal). Esto permite a los usuarios elegir entre recibir los datos de OOB en orden y recibirlos fuera de la secuencia sin tener que almacenar en búfer todos los datos intermedios. Es posible echar un vistazo a los datos de OOB.
Un usuario puede determinar si hay algún dato de OOB en espera de lectura mediante la función WSPIoctl(SIOCATMARK) de. Para los protocolos en los que el concepto de la posición del bloque de datos OOB dentro del flujo de datos normal es significativo (es decir, TCP), un proveedor de servicios de Windows Sockets mantendrá un marcador conceptual que indica la posición del último byte de datos OOB dentro del flujo de datos normal. Esto no es necesario para la implementación de la funcionalidad de WSPIoctl (SIOCATMARK), la presencia o ausencia de datos OOB es todo lo necesario.
En el caso de los protocolos en los que el concepto de la posición del bloque de datos OOB dentro del flujo de datos normal es significativo, una aplicación puede preferir procesar datos fuera de banda insertados, como parte del flujo de datos normal. Esto se logra estableciendo la opción de socket SO_OOBINLINE (consulte la sección WSPIoctl). En el caso de otros protocolos en los que los bloques de datos OOB son realmente independientes del flujo de datos normal, al intentar establecer SO_OOBINLINE se producirá un error. Una aplicación puede usar el comando SIOCATMARK WSPIoctl para determinar si hay datos OOB no leídos que preceden a la marca. Por ejemplo, puede usar esto para resincronizar con su elemento del mismo nivel asegurándose de que todos los datos hasta la marca del flujo de datos se descartan cuando proceda.
Con SO_OOBINLINE deshabilitado (de forma predeterminada):
- El proveedor de servicios winsock notifica a un cliente de un evento de FD_OOB, si el cliente registrado para la notificación con WSPAsyncSelect, de la misma manera que se usa FD_READ para notificar la presencia de datos normales. Es decir, FD_OOB se publica cuando llegan los datos de OOB y no había datos de OOB previamente en cola, y también cuando se leen los datos mediante la marca de MSG_OOB, y algunos datos de OOB permanecen para leerse después de que se haya devuelto la operación de lectura. FD_READ mensajes no se publican para los datos OOB.
- El proveedor de servicios Winsock devuelve de WSPSelect con el adecuado excepto los conjunto de sockets si los datos de OOB se ponen en cola en el socket.
- El cliente puede llamar a WSPRecv con MSG_OOB para leer el bloque de datos urgente en cualquier momento. El bloque de datos de OOB salta la cola.
- El cliente puede llamar a WSPRecv sin MSG_OOB para leer el flujo de datos normal. El bloque de datos OOB no aparecerá en el flujo de datos con datos normales. Si los datos de OOB permanecen después de cualquier llamada a WSPRecv, el proveedor de servicios notifica al cliente FD_OOB o a través de exceptfds cuando se usa WSPSelect.
- En el caso de los protocolos en los que los datos de OOB tienen una posición dentro del flujo de datos normal, una sola operación de WSPRecv no abarcará esa posición. Una WSPRecv devolverá los datos normales antes de la marca y se requiere un segundo WSPRecv para empezar a leer datos después de la marca.
Con SO_OOBINLINE habilitado:
- FD_OOB los mensajes no se publican para los datos OOB, con el fin de los WSPSelect y WSPAsyncSelect functions, los datos OOB se tratan como datos normales y se indican estableciendo el socket en readfds o enviando un mensaje FD_READ respectivamente.
- Es posible que el cliente no llame a WSPRecv con la marca MSG_OOB establecida para leer el bloque de datos OOB; se devolverá el código de error WSAEINVAL.
- El cliente puede llamar a WSPRecv sin la marca MSG_OOB establecida. Los datos de OOB se entregarán en su orden correcto dentro del flujo de datos normal. Los datos de OOB nunca se mezclarán con datos normales; debe haber tres solicitudes de lectura para superar los datos de OOB. La primera devuelve los datos normales anteriores al bloque de datos OOB, el segundo devuelve los datos OOB; el tercero devuelve los datos normales después de los datos de OOB. Es decir, se conservan los límites del bloque de datos OOB.
La rutina WSPAsyncSelect es especialmente adecuada para controlar la notificación de la presencia de datos OOB cuando SO_OOBINLINE está desactivado.