蓝牙和套接字选项

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

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

  • 参数必须是蓝牙套接字。
  • 级别 参数必须 SOL_RFCOMM

SO_BTH_AUTHENTICATE

对于断开连接的套接字,SO_BTH_AUTHENTICATE 指定 连接接受作才能成功完成身份验证。 如果之前未对两个蓝牙设备进行身份验证,则设置此套接字选项会主动启动身份验证。 密钥交换的用户界面(如有必要)由应用程序上下文外部的作系统提供。

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

对于传入连接,如果无法建立身份验证并返回 WSAEHOSTDOWN 错误,则会拒绝连接。 有关对蓝牙设备进行身份验证的详细信息,请参阅 BluetoothAuthenticateDevice

对于 SO_BTH_AUTHENTICATE 套接字选项,optval 是指向 ULONG bAuthenticate 的指针,必须 TRUE;optlen 等效于“sizeof(ULONG)”。

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

SO_BTH_ENCRYPT

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

对于SO_BTH_ENCRYPT套接字选项,optval 是指向 ULONG bEncrypt 的指针,必须 TRUE;optlen 等效于 sizeof(ULONG)。

使用 SP2 Windows XP: 对于已连接和身份验证的套接字,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 套接字服务提供程序段数据包的传输方式。 建议的 MTU 和最终协商的 MTU 必须介于 RFCOMM_MIN_MTURFCOMM_MAX_MTU之间,如 Ws2bth.h 头文件中定义。

对于 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 等于或大于此值的连接失败,/接受 进程。 尽管连接套接字允许设置此套接字选项,但如果协商已完成,则它不起作用。 在侦听套接字上设置此套接字选项将传播所有传入连接的值。 MAX MTU 值必须在 RFCOMM_MIN_MTURFCOMM_MAX_MTU之间,如 Ws2bth.h 头文件中定义。

对于 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 小于此值的连接会失败,/接受 过程。 尽管连接套接字允许设置此套接字选项,但如果协商已完成,则它不起作用。 在侦听套接字上设置此套接字选项将传播所有传入连接的值。

只有侦听套接字可以向下修改 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

连接

接受