gpt4 book ai didi

sockets - 取消L2CAP套接字上的重传

转载 作者:行者123 更新时间:2023-12-03 11:54:23 28 4
gpt4 key购买 nike

我想知道是否有人可以帮助我解决C蓝牙编程(Linux Bluez)方面的问题。
我正在使用Ubuntu 10.04,BlueZ 4.60。
我的目标是要有一个L2CAP套接字,其中在两台计算机之间发送数据的延迟将最小。
到目前为止,我设法打开了一个L2CAP套接字,但是此套接字有无数次重新传输,因此我正在尝试对其进行更改。我根本不想重传,因为我需要以最小的延迟快速传输数据,并且数据的可靠性并不重要。

我在网上找到了一个示例,该示例涉及更改套接字的刷新时间,并导致如果某个数据包在一定时间后未得到确认,则该数据包将被丢弃,并发送缓冲区中的下一个数据。
问题在于此示例不起作用:-(

这是我的代码,在bind命令之后调用此方法:

int set_flush_timeout(bdaddr_t *ba, int timeout)
{
int err = 0, dd, dev_id;
struct hci_conn_info_req *cr = 0;
struct hci_request rq = { 0 };


 struct {
uint16_t handle;
uint16_t flush_timeout;
} cmd_param;

struct {
uint8_t status;
uint16_t handle;
} cmd_response;

// find the connection handle to the specified bluetooth device
cr = (struct hci_conn_info_req*) malloc(
sizeof(struct hci_conn_info_req) +
sizeof(struct hci_conn_info));
bacpy( &cr->bdaddr, ba );
cr->type = ACL_LINK;
dev_id = hci_get_route( NULL);
dd = hci_open_dev( dev_id );
if( dd < 0 ) {
err = dd;
goto cleanup;
}

err = ioctl(dd, HCIGETCONNINFO, (unsigned long) cr );
if( err ) goto cleanup;

// build a command packet to send to the bluetooth microcontroller
cmd_param.handle = cr->conn_info->handle;
cmd_param.flush_timeout = htobs(timeout);
rq.ogf = OGF_HOST_CTL;
rq.ocf = 0x28;
rq.cparam = &cmd_param;
rq.clen = sizeof(cmd_param);
rq.rparam = &cmd_response;
rq.rlen = sizeof(cmd_response);
rq.event = EVT_CMD_COMPLETE;

// send the command and wait for the response
err = hci_send_req( dd, &rq, 1 );
if( err ) goto cleanup;

if( cmd_response.status ) {
err = -1;
errno = bt_error(cmd_response.status);
}

cleanup:
free(cr);
if( dd >= 0) close(dd);
return err;
}

我怎么了
有谁知道另一种选择可以解决我的问题。
代码示例也将很棒!!

谢谢!!

最佳答案

设置自动刷新超时的这段代码似乎是正确的。
您可以通过确保响应此命令的命令完成事件而获得“成功”来确保。

我怀疑问题可能出在您的数据包发送代码中,请注意,要使自动刷新超时生效,单个数据包应标记为可自动刷新。HCI数据包具有Packet_Boundary_Flag,您可以发送该数据包以指示单个数据包是否可冲洗的。

另请注意,刷新超时必须足够大,以留出足够的时间,以便数据包能够进行传输尝试,定义刷新超时的方式可能导致即使没有一次传输数据包也将刷新数据包,因此您需要调整它。根据定义,当数据包排队等待传输时,刷新超时开始。

关于sockets - 取消L2CAP套接字上的重传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723097/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com