Opciones de Bluetooth y Socket
Bluetooth para Windows admite las siguientes opciones de socket. Las opciones de socket se establecen y consultan mediante las funciones setsockopt y getsockopt , respectivamente. Todas las opciones siguientes se pueden usar con la función setsockopt , pero solo la opción SO_BTH_MTU está disponible para su uso con la función getockopt .
Se requieren las siguientes opciones de configuración para trabajar con las opciones de socket Bluetooth:
- El parámetro s debe ser un socket Bluetooth.
- El parámetro level debe ser SOL_RFCOMM.
SO_BTH_AUTHENTICATE
En el caso de los sockets desconectados, el SO_BTH_AUTHENTICATE especifica que la autenticación es necesaria para que una operación de conexión o aceptación se complete correctamente. Establecer esta opción de socket inicia activamente la autenticación durante el establecimiento de la conexión, si los dos dispositivos Bluetooth no se autenticaron previamente. El sistema operativo proporciona la interfaz de usuario para el intercambio de claves de paso, si es necesario, fuera del contexto de la aplicación.
En el caso de las conexiones salientes que requieren autenticación, se produce un error en la operación de conexión con WSAEACCES si la autenticación no se realiza correctamente. En respuesta, la aplicación puede pedir al usuario que autentique los dos dispositivos Bluetooth antes de la conexión.
Para las conexiones entrantes, la conexión se rechaza si no se puede establecer la autenticación y devuelve un error WSAEHOSTDOWN . Para obtener más información sobre cómo autenticar dispositivos Bluetooth, consulta BluetoothAuthenticateDevice.
Para la opción de socket SO_BTH_AUTHENTICATE , optval es un puntero a ULONG bAuthenticate y debe ser TRUE; optlen es equivalente a "sizeof(ULONG)".
Windows XP con SP2: SO_BTH_AUTHENTICATE inicia la autenticación para sockets conectados y fuerza la autenticación tras la conexión para sockets no conectados. En el caso de las conexiones entrantes, la conexión se rechaza si no se puede realizar la autenticación.
SO_BTH_ENCRYPT
En sockets no conectados, la opción de socket SO_BTH_ENCRYPT aplica el cifrado para establecer una conexión. El cifrado solo está disponible para las conexiones autenticadas. Para las conexiones entrantes, se rechaza automáticamente una conexión para la que no se puede establecer el cifrado y devuelve WSAEHOSTDOWN como error. En el caso de las conexiones salientes, se produce un error en la función connect con WSAEACCES si no se puede establecer el cifrado. En respuesta, la aplicación puede pedir al usuario que autentique los dos dispositivos Bluetooth antes de la conexión. Para obtener más información sobre cómo autenticar dispositivos Bluetooth, consulta BluetoothAuthenticateDevice.
Para la opción de socket SO_BTH_ENCRYPT, optval es un puntero a ULONG bEncrypt y debe ser TRUE; optlen es equivalente a sizeof(ULONG).
Windows XP con SP2: En el caso de un socket conectado y autenticado, SO_BTH_ENCRYPT inicia el cifrado.
SO_BTH_MTU
La opción de socket SO_BTH_MTU es una opción avanzada que se usa principalmente para la validación. La opción SO_BTH_MTU obtiene o establece la MTU RFCOMM predeterminada (unidad de transmisión máxima) para la negociación de conexión a un valor diferente del valor predeterminado del protocolo RFCOMM.
Dado que el MTU de RFCOMM se ve afectado por la MTU L2CAP subyacente, y el protocolo y los valores mínimos y máximos de la aplicación, el valor predeterminado de SO_BTH_MTU es solo un punto de partida para la negociación con el par remoto, y es probable que la MTU negociada final variará de la predeterminada. Establecer el valor de SO_BTH_MTU puede afectar negativamente al rendimiento y, como tal, cualquier modificación debe realizarse con conocimiento del protocolo Bluetooth subyacente.
La opción de socket SO_BTH_MTU se puede realizar en sockets conectados, pero no tiene ningún efecto si la negociación ya se ha completado. Establecerlo en el socket de escucha (servidor) no tiene ningún efecto.
La cantidad de datos que una aplicación puede enviar o recibir en una sola llamada de socket no se ve afectada por la MTU; MTU solo afecta a cómo los paquetes subyacentes del proveedor de servicios de Windows Sockets para el transporte. Tanto la MTU propuesta como la MTU negociada en última instancia deben estar entre RFCOMM_MIN_MTU y RFCOMM_MAX_MTU, tal como se define en el archivo de encabezado Ws2bth.h.
Para la opción de socket SO_BTH_MTU , optval es un puntero a ULONG mtu; optlen es equivalente a "sizeof(ULONG)".
SO_BTH_MTU_MAX
La opción de socket SO_BTH_MTU_MAX es una opción avanzada que se usa principalmente para la validación. La opción de socket SO_BTH_MTU_MAX establece el MTU RFCOMM máximo (unidad de transmisión máxima) para la negociación de la conexión. Las conexiones con una MTU RFCOMM igual o mayor que este valor producen un error durante el proceso deaceptación de conexión/. Aunque se permite establecer esta opción de socket para un socket conectado, no tiene ningún efecto si la negociación se ha completado. Al establecer esta opción de socket en un socket de escucha, se propaga el valor de todas las conexiones entrantes. El valor max MTU debe estar entre RFCOMM_MIN_MTU y RFCOMM_MAX_MTU, tal y como se define en el archivo de encabezado Ws2bth.h.
Para la opción de socket SO_BTH_MTU_MAX , optval es un puntero a ULONG max_mtu; optlen es equivalente a "sizeof(ULONG)".
SO_BTH_MTU_MIN
La opción de socket SO_BTH_MTU_MIN es una opción avanzada que se usa principalmente para la validación. La opción de socket SO_BTH_MTU_MIN establece la MTU RFCOMM mínima (unidad de transmisión máxima) para la negociación de la conexión. Las conexiones con un MTU RFCOMM menor que este valor generan un error durante el proceso deaceptación de conexión/. Aunque se permite establecer esta opción de socket para un socket conectado, no tiene ningún efecto si la negociación se ha completado. Al establecer esta opción de socket en un socket de escucha, se propaga el valor de todas las conexiones entrantes.
Solo un socket de escucha puede revisar la MTU hacia abajo, por lo tanto, si el valor propuesto por el socket de conexión es menor que el valor establecido para SO_BTH_MTU_MIN en el socket de escucha, se rechaza la conexión. La MTU mínima debe estar entre RFCOMM_MIN_MTU y RFCOMM_MAX_MTU, tal y como se define en el archivo de encabezado Ws2bth.h.
Para la opción de socket SO_BTH_MTU_MIN, optval es un puntero a ULONG min_mtu; optlen es equivalente a "sizeof(ULONG)".
Temas relacionados