One AF_* constant for each of sockaddr_{hci,l2cap,rfcomm}?

Eugene M. Kim freebsd.org at ab.ote.we.lv
Thu Aug 30 15:49:00 PDT 2007


Hello,

It seems that AF_BLUETOOTH ambiguously identifies three different types 
of socket—HCI, L2CAP and RFCOMM—each with its own sockaddr_* type.  This 
deviates from the standard practice where there is a 1:1 mapping between 
an AF_* constant and a corresponding sockaddr_* type, and this may, in 
turn, break usage of system calls such as getsockname(2) and 
getpeername(2): These calls return a struct sockaddr whose sa_family 
should uniquely and unambiguously identify the real sockaddr_* struct to 
which the returned sockaddr should be type-cast; if sa_family == 
AF_BLUETOOTH, there are three possibilities and an application that 
calls get{sock,peer}name(2) cannot choose one of them without extra 
information (namely, the third argument to the socket() call that 
created the socket).

In this light, shouldn't a unique AF_* constant be allocated for each 
Bluetooth socket type, such as AF_BTHCI, AF_BTL2CAP and AF_BTRFCOMM, 
instead of just one AF_BLUETOOTH?

Regards,
Eugene



More information about the freebsd-bluetooth mailing list