diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 1bc7f76b5ba694..970698c5f644a2 100644 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -164,8 +164,10 @@ created. Socket addresses are represented as follows: - :const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a :class:`bytes` object containing the Bluetooth address in a - string format. (ex. ``b'12:23:34:45:56:67'``) This protocol is not - supported under FreeBSD. + string format. (ex. ``b'12:23:34:45:56:67'``) + + .. versionchanged:: next + FreeBSD support added. - :const:`AF_ALG` is a Linux-only socket based interface to Kernel cryptography. An algorithm socket is configured with a tuple of two to four diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 41885406ec3409..cf46acbaab4b9e 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -2620,9 +2620,7 @@ def testBluetoothConstants(self): socket.BTPROTO_HCI socket.SOL_HCI socket.BTPROTO_L2CAP - - if not sys.platform.startswith("freebsd"): - socket.BTPROTO_SCO + socket.BTPROTO_SCO def testCreateRfcommSocket(self): with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) as s: @@ -2638,8 +2636,7 @@ def testCreateHciSocket(self): with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_RAW, socket.BTPROTO_HCI) as s: pass - @unittest.skipIf(sys.platform == "win32" or sys.platform.startswith("freebsd"), - "windows and freebsd do not support SCO sockets") + @unittest.skipIf(sys.platform == "win32", "windows does not support SCO sockets") def testCreateScoSocket(self): with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_SCO) as s: pass diff --git a/Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst b/Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst new file mode 100644 index 00000000000000..aa5c4dfdc72684 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst @@ -0,0 +1 @@ +Add support for :data:`~socket.BTPROTO_SCO` in sockets on FreeBSD. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8f66573d8629cb..22a3a2effe2962 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -466,6 +466,7 @@ remove_unusable_flags(PyObject *m) #define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM #define BTPROTO_HCI BLUETOOTH_PROTO_HCI +#define BTPROTO_SCO BLUETOOTH_PROTO_SCO #define SOL_HCI SOL_HCI_RAW #define HCI_FILTER SO_HCI_RAW_FILTER #define sockaddr_l2 sockaddr_l2cap @@ -474,6 +475,7 @@ remove_unusable_flags(PyObject *m) #define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb) #define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb) #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb) +#define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb) #elif defined(__NetBSD__) || defined(__DragonFly__) #define sockaddr_l2 sockaddr_bt #define sockaddr_rc sockaddr_bt @@ -1536,15 +1538,15 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) return ret; #endif } +#endif /* BTPROTO_HCI */ -#if !defined(__FreeBSD__) +#ifdef BTPROTO_SCO case BTPROTO_SCO: { struct sockaddr_sco *a = (struct sockaddr_sco *) addr; return makebdaddr(&_BT_SCO_MEMB(a, bdaddr)); } -#endif /* !__FreeBSD__ */ -#endif /* BTPROTO_HCI */ +#endif /* BTPROTO_SCO */ default: PyErr_SetString(PyExc_ValueError, @@ -2156,7 +2158,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, *len_ret = sizeof *addr; return 1; } -#if !defined(__FreeBSD__) +#endif /* BTPROTO_HCI */ +#ifdef BTPROTO_SCO case BTPROTO_SCO: { const char *straddr; @@ -2176,8 +2179,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, *len_ret = sizeof *addr; return 1; } -#endif /* !__FreeBSD__ */ -#endif /* BTPROTO_HCI */ +#endif /* BTPROTO_SCO */ default: PyErr_Format(PyExc_OSError, "%s(): unknown Bluetooth protocol", caller); @@ -2732,11 +2734,11 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret) case BTPROTO_HCI: *len_ret = sizeof (struct sockaddr_hci); return 1; -#if !defined(__FreeBSD__) +#endif /* BTPROTO_HCI */ +#ifdef BTPROTO_SCO case BTPROTO_SCO: *len_ret = sizeof (struct sockaddr_sco); return 1; -#endif /* !__FreeBSD__ */ #endif /* BTPROTO_HCI */ default: PyErr_SetString(PyExc_OSError, "getsockaddrlen: " pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy