Bluetoothおよびソケットオプション
Bluetooth for Windowsでは、次のソケットオプションがサポートされています。 ソケットオプションは、setsockopt関数とgetsockopt関数をそれぞれ使用して設定および照会されます。 次のオプションはすべてsetsockopt関数で使用できますが、getsockopt関数で使用できるのはSO_BTH_MTUオプションだけです。
Bluetoothソケットオプションを使用するには、次の設定が必要です。
- sパラメーターはBluetoothソケットである必要があります。
- levelパラメーターはSOL_RFCOMMである必要があります。
SO_BTH_AUTHENTICATE
切断されたソケットの場合、SO_BTH_AUTHENTICATEは、接続または受け入れ操作が正常に完了するために認証が必要であることを指定します。 このソケットオプションを設定すると、2つのBluetoothデバイスが以前に認証されていない場合、接続の確立中に認証がアクティブに開始されます。 パスキー交換のユーザーインターフェイスは、必要に応じて、アプリケーションコンテキストの外部のオペレーティングシステムによって提供されます。
認証を必要とする送信接続の場合、認証が成功しなかった場合、接続操作はWSAEACCESで失敗します。 応答として、アプリケーションは接続前に2つのBluetoothデバイスを認証するようにユーザーに求めることがあります。
着信接続の場合、認証を確立できず、WSAEHOSTDOWNエラーが返されると、接続は拒否されます。 Bluetoothデバイスの認証の詳細については、 「BluetoothAuthenticateDevice」 を参照してください。
SO_BTH_AUTHENTICATEソケットオプションの場合、optvalはULONG bAuthenticateへのポインターであり、TRUEである必要があります。optlenは"sizeof (ULONG) "と同じです。
Windows XP SP2: SO_BTH_AUTHENTICATEは、接続されているソケットの認証を開始し、接続されていないソケットの接続時に認証を強制します。 着信接続では、認証を実行できない場合、接続は拒否されます。
SO_BTH_ENCRYPT
接続されていないソケットでは、SO_BTH_ENCRYPTソケットオプションによって暗号化が強制され、接続が確立されます。 暗号化は、認証された接続でのみ使用できます。 着信接続の場合、暗号化を確立できない接続は自動的に拒否され、エラーとしてWSAEHOSTDOWNが返されます。 発信接続の場合、暗号化を確立できないと、connect関数はWSAEACCESで失敗します。 応答として、アプリケーションは接続前に2つのBluetoothデバイスを認証するようにユーザーに求めることがあります。 Bluetoothデバイスの認証の詳細については、 「BluetoothAuthenticateDevice」 を参照してください。
SO_BTH_ENCRYPTソケットオプションの場合、optvalはULONG bEncryptへのポインターであり、TRUEである必要があります。optlenはsizeof (ULONG) と同じです。
Windows XP SP2: 接続され、認証されているソケットの場合、SO_BTH_ENCRYPTは暗号化を開始します。
SO_BTH_MTU
SO_BTH_MTUソケットオプションは、主に検証に使用される高度なオプションです。 SO_BTH_MTUオプションは、RFCOMM protocol-default値とは異なる値に接続ネゴシエーションの既定のRFCOMM MTU (最大転送単位) を取得または設定します。
RFCOMM MTUは基になるL2CAP MTU、およびプロトコルとアプリケーションの最小値と最大値の影響を受けるため、SO_BTH_MTUの既定値はリモートピアとのネゴシエーションの開始点にすぎず、最終的にネゴシエートされるMTUは既定値と異なる可能性があります。 SO_BTH_MTU値を設定すると、スループットに悪影響を及ぼす可能性があるため、基になるBluetoothプロトコルに関する知識を持って変更を実行する必要があります。
SO_BTH_MTUソケットオプションは接続されているソケットで実行できますが、ネゴシエーションが既に完了している場合は効果がありません。 リスニング (サーバー) ソケットで設定しても効果はありません。
アプリケーションが1回のソケット呼び出しで送受信できるデータの量は、MTUの影響を受けません。MTUは、基になるWindowsソケットサービスプロバイダーがトランスポート用にパケットをセグメント化する方法にのみ影響します。 提案されたMTUと最終的にネゴシエートされたMTUの両方が、Ws2bthヘッダーファイルで定義されているように、RFCOMM_MIN_MTUとRFCOMM_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プロセス中に失敗します。 接続されたソケットに対してこのソケットオプションを設定することはできますが、ネゴシエーションが完了した場合は効果がありません。 リッスンしているソケットでこのソケットオプションを設定すると、すべての受信接続の値が伝達されます。 最大MTU値は、Ws2bthヘッダーファイルで定義されているように、RFCOMM_MIN_MTUとRFCOMM_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プロセス中に失敗します。 接続されたソケットに対してこのソケットオプションを設定することはできますが、ネゴシエーションが完了した場合は効果がありません。 リッスンしているソケットでこのソケットオプションを設定すると、すべての受信接続の値が伝達されます。
そのため、接続ソケットによって提案された値が、リッスンしているソケットでSO_BTH_MTU_MINに設定されている値よりも小さい場合、接続は拒否されます。 最小MTUは、Ws2bthヘッダーファイルで定義されているように、RFCOMM_MIN_MTUとRFCOMM_MAX_MTUの間である必要があります。
SO_BTH_MTU_MINソケットオプションの場合、optvalはULONG min_mtuへのポインターです。optlenは"sizeof (ULONG) "と同じです。
関連トピック