Provided by: libbluetooth-dev_5.79-1_amd64 bug

NAME

       rfcomm - RFCOMM protocol

SYNOPSIS

          #include <sys/socket.h>
          #include <bluetooth/bluetooth.h>
          #include <bluetooth/rfcomm.h>

          rfcomm_socket = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

DESCRIPTION

       The  RFCOMM  protocol  provides  emulation of serial ports over the L2CAP(7) protocol. The
       protocol is based on the ETSI standard TS 07.10.

       RFCOMM is a simple transport protocol, with additional  provisions  for  emulating  the  9
       circuits of RS-232 (EIATIA-232-E) serial ports.

SOCKET ADDRESS

          struct sockaddr_rc {
              sa_family_t rc_family;
              unsigned short rc_bdaddr;
              unsigned char rc_channel;
          };

       Example:

          struct sockaddr_rc addr;

          memset(&addr, 0, sizeof(addr));
          addr.rc_family = AF_BLUETOOTH;
          bacpy(&addr.rc_bdaddr, bdaddr);
          addr.rc_channel = channel;

SOCKET OPTIONS

       The  socket  options  listed  below  can  be  set  by  using  setsockopt(2)  and read with
       getsockopt(2) with the socket level set to SOL_BLUETOOTH.

   BT_SECURITY (since Linux 2.6.30)
       Channel security level, possible values:

            ┌───────────────────┬─────────────────────┬─────────────────────┬──────────────┐
            │Value              │ Security Level      │ Link Key Type       │ Encryption   │
            ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤
            │BT_SECURITY_SDP    │ 0 (SDP Only)        │ None                │ Not required │
            ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤
            │BT_SECURITY_LOW    │ 1 (Low)             │ Unauthenticated     │ Not required │
            ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤
            │BT_SECURITY_MEDIUM │ 2     (Medium     - │ Unauthenticated     │ Desired      │
            │                   │ default)            │                     │              │
            ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤
            │BT_SECURITY_HIGH   │ 3 (High)            │ Authenticated       │ Required     │
            ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤
            │BT_SECURITY_FIPS   │ 4 (Secure Only)     │ Authenticated       │ Required     │
            │(since Linux 3.15) │                     │ (P-256 based Secure │              │
            │                   │                     │ Simple Pairing  and │              │
            │                   │                     │ Secure              │              │
            │                   │                     │ Authentication)     │              │
            └───────────────────┴─────────────────────┴─────────────────────┴──────────────┘
       Example:

          int level = BT_SECURITY_HIGH;
          int err = setsockopt(rfcomm_socket, SOL_BLUETOOTH, BT_SECURITY, &level,
                               sizeof(level));
          if (err == -1) {
              perror("setsockopt");
              return 1;
          }

   BT_DEFER_SETUP (since Linux 2.6.30)
       Channel defer connection setup, this control if  the  connection  procedure  needs  to  be
       authorized  by  userspace  before  responding which allows authorization at profile level,
       possible values:

                              ┌──────┬───────────────────┬───────────────┐
                              │Value │ Description       │ Authorization │
                              ├──────┼───────────────────┼───────────────┤
                              │0     │ Disable (default) │ Not required  │
                              ├──────┼───────────────────┼───────────────┤
                              │1     │ Enable            │ Required      │
                              └──────┴───────────────────┴───────────────┘
       Example:

          int defer_setup = 1;
          int err = setsockopt(rfcomm_socket, SOL_BLUETOOTH, BT_DEFER_SETUP,
                               &defer_setup, sizeof(defer_setup));
          if (err == -1) {
              perror("setsockopt");
              return err;
          }

          err = listen(rfcomm_socket, 5);
          if (err) {
              perror("listen");
              return err;
          }

          struct sockaddr_rc remote_addr = {0};
          socklen_t addr_len = sizeof(remote_addr);
          int new_socket = accept(rfcomm_socket, (struct sockaddr*)&remote_addr,
                                  &addr_len);
          if (new_socket < 0) {
              perror("accept");
              return new_socket;
          }

          /* To complete the connection setup of new_socket read 1 byte */
          char c;
          struct pollfd pfd;

          memset(&pfd, 0, sizeof(pfd));
          pfd.fd = new_socket;
          pfd.events = POLLOUT;

          err = poll(&pfd, 1, 0);
          if (err) {
              perror("poll");
              return err;
          }

          if (!(pfd.revents & POLLOUT)) {
              err = read(sk, &c, 1);
              if (err < 0) {
                  perror("read");
                  return err;
              }
          }

   BT_FLUSHABLE (since Linux 2.6.39)
       Channel flushable flag, this control if the channel data can be flushed or  not,  possible
       values:

                        ┌─────────────────┬────────────────┬───────────────────┐
                        │Define           │ Value          │ Description       │
                        ├─────────────────┼────────────────┼───────────────────┤
                        │BT_FLUSHABLE_OFF │ 0x00 (default) │ Do not flush data │
                        ├─────────────────┼────────────────┼───────────────────┤
                        │BT_FLUSHABLE_ON  │ 0x01           │ Flush data        │
                        └─────────────────┴────────────────┴───────────────────┘
   BT_POWER (since Linux 3.1)
       Channel  power  policy, this control if the channel shall force exit of sniff mode or not,
       possible values:

                ┌──────────────────────────┬────────────────┬──────────────────────────┐
                │Define                    │ Value          │ Description              │
                ├──────────────────────────┼────────────────┼──────────────────────────┤
                │BT_POWER_FORCE_ACTIVE_OFF │ 0x00 (default) │ Don't   force   exit  of │
                │                          │                │ sniff mode               │
                ├──────────────────────────┼────────────────┼──────────────────────────┤
                │BT_POWER_FORCE_ACTIVE_ON  │ 0x01           │ Force exit of sniff mode │
                └──────────────────────────┴────────────────┴──────────────────────────┘
   BT_CHANNEL_POLICY (since Linux 3.10)
       High-speed (AMP) channel policy, possible values:

                  ┌──────────────────────────────────┬─────────────┬──────────────────┐
                  │Define                            │ Value       │ Description      │
                  ├──────────────────────────────────┼─────────────┼──────────────────┤
                  │BT_CHANNEL_POLICY_BREDR_ONLY      │ 0 (default) │ BR/EDR only      │
                  ├──────────────────────────────────┼─────────────┼──────────────────┤
                  │BT_CHANNEL_POLICY_BREDR_PREFERRED │ 1           │ BR/EDR Preferred │
                  ├──────────────────────────────────┼─────────────┼──────────────────┤
                  │BT_CHANNEL_POLICY_BREDR_PREFERRED │ 2           │ AMP Preferred    │
                  └──────────────────────────────────┴─────────────┴──────────────────┘
   BT_PHY (since Linux 5.10)
       Channel supported PHY(s), possible values:

                             ┌───────────────────┬───────┬─────────────────┐
                             │Define             │ Value │ Description     │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_1M_1SLOT │ BIT 0 │ BR 1Mbps 1SLOT  │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_1M_3SLOT │ BIT 1 │ BR 1Mbps 3SLOT  │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_1M_5SLOT │ BIT 2 │ BR 1Mbps 5SLOT  │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_2M_1SLOT │ BIT 3 │ EDR 2Mbps 1SLOT │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_2M_3SLOT │ BIT 4 │ EDR 2Mbps 3SLOT │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_2M_5SLOT │ BIT 5 │ EDR 2Mbps 5SLOT │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_3M_1SLOT │ BIT 6 │ EDR 3Mbps 1SLOT │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_3M_3SLOT │ BIT 7 │ EDR 3Mbps 3SLOT │
                             ├───────────────────┼───────┼─────────────────┤
                             │BT_PHY_BR_3M_5SLOT │ BIT 8 │ EDR 3Mbps 5SLOT │
                             └───────────────────┴───────┴─────────────────┘

RESOURCES

        <http://www.bluez.org>

REPORTING BUGS

        <linux-bluetooth@vger.kernel.org>

SEE ALSO

       socket(7), rctest(1)

COPYRIGHT

       Free use of this software is granted under ther terms of the  GNU  Lesser  General  Public
       Licenses (LGPL).