蓝牙和套接字选项

用于 Windows 的蓝牙支持以下套接字选项。 套接字选项的设置和查询分别使用 setsockoptgetsockopt 函数。 下列所有选项都可与 setsockopt 函数一起使用,但只有 SO_BTH_MTU 选项可与 getsockopt 函数一起使用。

使用蓝牙套接字选项需要进行以下设置:

  • s 参数必须是蓝牙套接字。
  • level 参数必须 SOL_RFCOMM

SO_BTH_AUTHENTICATE

对于断开连接的套接字,SO_BTH_AUTHENTICATE 指定需要进行身份验证才能成功完成 connectaccept 操作。 如果两台蓝牙设备之前未通过身份验证,则设置此套接字选项可在建立连接时主动启动身份验证。 如有必要,用于交换密码的用户界面由操作系统在应用程序环境之外提供。

对于需要身份验证的传出连接,如果身份验证不成功,connect 操作会失败并出现 WSAEACCES。 对此,应用程序可能会提示用户在连接前对两台蓝牙设备进行身份验证。

对于传入连接,如果无法建立身份验证,连接将被拒绝并返回 WSAEHOSTDOWN 错误。 有关验证蓝牙设备的更多信息,请参阅 BluetoothAuthenticateDevice

对于 SO_BTH_AUTHENTICATE 套接字选项,optval 是指向 ULONG bAuthenticate 的指针,必须为 TRUEoptlen 等同于“sizeof(ULONG)”。

Windows XP SP2:SO_BTH_AUTHENTICATE 对已连接的套接字启动身份验证,对未连接的套接字则在连接时强制进行身份验证。 对于传入连接,如果无法执行身份验证,连接将被拒绝。

SO_BTH_ENCRYPT

在未连接的套接字上,SO_BTH_ENCRYPT 套接字选项会强制加密以建立连接。 加密仅适用于经过身份验证的连接。 对于传入连接,无法建立加密的连接会被自动拒绝,并返回 WSAEHOSTDOWN 错误消息。 对于传出连接,如果无法建立加密,connect 功能会失败并出现 WSAEACCES。 对此,应用程序可能会提示用户在连接前对两台蓝牙设备进行身份验证。 有关验证蓝牙设备的更多信息,请参阅 BluetoothAuthenticateDevice

对于 SO_BTH_ENCRYPT 套接字选项,optval 是指向 ULONG bEncrypt 的指针,必须是 TRUEoptlen 相当于 sizeof(ULONG)。

Windows XP SP2:对于已连接并通过身份验证的套接字,SO_BTH_ENCRYPT 会启动加密。

SO_BTH_MTU

SO_BTH_MTU 套接字选项是一个主要用于验证的高级选项。 SO_BTH_MTU 选项可获取或设置用于连接协商的默认 RFCOMM MTU(最大传输单元),使其与 RFCOMM 协议默认值不同。

由于 RFCOMM MTU 受基础 L2CAP MTU 以及协议和应用程序最小值和最大值的影响,SO_BTH_MTU 的默认值只是与远程对等设备协商的起点,最终协商的 MTU 可能与默认值不同。 设置 SO_BTH_MTU 值可能会对吞吐量产生负面影响,因此在进行任何修改时都应了解基础蓝牙协议。

SO_BTH_MTU 套接字选项可在已连接的套接字上执行,但如果协商已完成,则该选项不起作用。 在侦听(服务器)套接字上设置它没有任何作用。

应用程序在单个套接字调用中可发送或接收的数据量不受 MTU 影响;MTU 只影响基础 Windows 套接字服务提供商如何分割数据包以进行传输。 根据 Ws2bth.h 头文件的定义,建议的 MTU 和最终协商的 MTU 都必须介于 RFCOMM_MIN_MTURFCOMM_MAX_MTU 之间。

对于 SO_BTH_MTU 套接字选项,optval 是指向 ULONG mtu 的指针;optlen 相当于“sizeof(ULONG)”。

SO_BTH_MTU_MAX

SO_BTH_MTU_MAX 套接字选项是一个主要用于验证的高级选项。 SO_BTH_MTU_MAX 套接字选项为连接协商设置最大 RFCOMM MTU(最大传输单元)。 RFCOMM MTU 等于或大于此值的连接在 connect/accept 进程中会失败。 虽然允许对已连接的套接字设置该套接字选项,但如果协商已完成,则该选项不起作用。 在侦听套接字上设置该套接字选项后,该值会传播给所有传入连接。 根据 Ws2bth.h 头文件的定义,MAX MTU 值必须介于 RFCOMM_MIN_MTURFCOMM_MAX_MTU 之间。

对于 SO_BTH_MTU_MAX 套接字选项,optval 是指向 ULONG max_mtu 的指针;optlen 相当于“sizeof(ULONG)”。

SO_BTH_MTU_MIN

SO_BTH_MTU_MIN 套接字选项是一个主要用于验证的高级选项。 SO_BTH_MTU_MIN 套接字选项为连接协商设置最小 RFCOMM MTU(最大传输单元)。 RFCOMM MTU 小于此值的连接在 connect/accept 进程中会失败。 虽然允许对已连接的套接字设置该套接字选项,但如果协商已完成,则该选项不起作用。 在侦听套接字上设置该套接字选项后,该值会传播给所有传入连接。

只有侦听套接字可以向下修改 MTU,因此如果连接套接字提出的值小于侦听套接字上为 SO_BTH_MTU_MIN 设置的值,连接将被拒绝。 根据 Ws2bth.h 头文件的定义,最小 MTU 必须介于 RFCOMM_MIN_MTURFCOMM_MAX_MTU 之间。

对于 SO_BTH_MTU_MIN 套接字选项,optval 是指向 ULONG min_mtu 的指针;optlen 相当于“sizeof(ULONG)”。

Windows 套接字

getsockopt

setsockopt

BluetoothAuthenticateDevice

connect

accept