在BLUEZ中如何使用SCO?

在BLUEZ中如何使用SCO?,c,sockets,ubuntu,bluez,C,Sockets,Ubuntu,Bluez,我试着使用Bluez的SCO。我举了一个例子: 我的代码如下所示: sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK, BTPROTO_SCO); if (sk < 0) { syslog(LOG_ERR, "Can't create socket: %s (%d)", strerror(errno), errno); return -1; }

我试着使用Bluez的SCO。我举了一个例子:

我的代码如下所示:

sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK, BTPROTO_SCO);
if (sk < 0) {
    syslog(LOG_ERR, "Can't create socket: %s (%d)",
                        strerror(errno), errno);
    return -1;
}


/* Connect to remote device */
memset(&addr, 0, sizeof(addr));
addr.sco_family = AF_BLUETOOTH;
str2ba(svr, &addr.sco_bdaddr);

if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
    syslog(LOG_ERR, "Can't connect: %s (%d)",
                        strerror(errno), errno);
}

/* Get connection information */
memset(&conn, 0, sizeof(conn));
optlen = sizeof(conn);

if (getsockopt(sk, SOL_SCO, SCO_CONNINFO, &conn, &optlen) < 0) {
    syslog(LOG_ERR, "Can't get SCO connection information: %s (%d)",
                        strerror(errno), errno);
}


if( recv(sk,buffer, bufferSize,0) < 0) {
    syslog(LOG_ERR, "Can't read: %s (%d)",
                        strerror(errno), errno);
}
sk=socket(PF_蓝牙,SOCK_SEQPACKET | SOCK_NONBLOCK,BTPROTO_SCO);
if(sk<0){
系统日志(日志错误,“无法创建套接字:%s(%d)”,
strerror(errno),errno);
返回-1;
}
/*连接到远程设备*/
memset(&addr,0,sizeof(addr));
addr.sco_family=AF_蓝牙;
str2ba(svr和地址sco_bdaddr);
if(connect(sk,(struct sockaddr*)&addr,sizeof(addr))<0){
系统日志(日志错误,“无法连接:%s(%d)”,
strerror(errno),errno);
}
/*获取连接信息*/
memset(&conn,0,sizeof(conn));
optlen=尺寸(康涅狄格州);
if(getsockopt(sk、SOL_SCO、SCO_CONNINFO和conn及optlen)<0){
系统日志(日志错误,“无法获取SCO连接信息:%s(%d)”,
strerror(errno),errno);
}
if(recv(sk,buffer,bufferSize,0)<0){
系统日志(日志错误,“无法读取:%s(%d)”,
strerror(errno),errno);
}
每当我试图读取数据时,就会出现一个错误:“无法读取:函数未实现(38)” 当我尝试使用getsockopt时,我得到一个错误,表示传输端点未连接

我不知道如何修复它。我使用Ubuntu20.04和bluetoothd-v==5.53