BLEデバイスと通信するために、Linux OSでBluezライブラリを使用しました。しかし、私は私のコードを実行すると、時々私はデバイスと接続中に失敗の状態を受け取りました。この機能をご覧ください。connect()関数を使用しているときにerrno EMLINKを受け取りました
static int l2cap_le_att_connect(bdaddr_t *src, bdaddr_t *dst, uint8_t dst_type,
int sec)
{
int sock;
struct sockaddr_l2 srcaddr, dstaddr;
struct bt_security btsec;
if (verbose) {
char srcaddr_str[18], dstaddr_str[18];
ba2str(src, srcaddr_str);
ba2str(dst, dstaddr_str);
printf("btgatt-client: Opening L2CAP LE connection on ATT "
"channel:\n\t src: %s\n\tdest: %s\n",
srcaddr_str, dstaddr_str);
}
sock = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
if (sock < 0) {
perror("Failed to create L2CAP socket");
return -1;
}
/* Set up source address */
memset(&srcaddr, 0, sizeof(srcaddr));
srcaddr.l2_family = AF_BLUETOOTH;
srcaddr.l2_cid = htobs(ATT_CID);
srcaddr.l2_bdaddr_type = 0;
bacpy(&srcaddr.l2_bdaddr, src);
if (bind(sock, (struct sockaddr *)&srcaddr, sizeof(srcaddr)) < 0) {
perror("Failed to bind L2CAP socket");
close(sock);
return -1;
}
/* Set the security level */
memset(&btsec, 0, sizeof(btsec));
btsec.level = sec;
if (setsockopt(sock, SOL_BLUETOOTH, BT_SECURITY, &btsec,
sizeof(btsec)) != 0) {
fprintf(stderr, "Failed to set L2CAP security level\n");
close(sock);
return -1;
}
/* Set up destination address */
memset(&dstaddr, 0, sizeof(dstaddr));
dstaddr.l2_family = AF_BLUETOOTH;
dstaddr.l2_cid = htobs(ATT_CID);
dstaddr.l2_bdaddr_type = dst_type;
bacpy(&dstaddr.l2_bdaddr, dst);
printf("Connecting to device...");
fflush(stdout);
if (connect(sock, (struct sockaddr *) &dstaddr, sizeof(dstaddr)) < 0) {
perror(" Failed to connect");
close(sock);
return -1;
}
printf(" Done\n");
return sock;
}
問題は、CONNECT()関数の戻り値-1で、errnoには、私は多くの文書を読んで、私はこのバグの原因を見つけることができませんEMLINK です。私を助けてください。ありがとうございます
@AnttiHaapala:EMLINKにエラーがあると思いますか? – Viet
私は外見上以外のBluetoothのスタックに精通していないので、私はこれをgoogleにしました。これについてはそれほど分かりません。http://comments.gmane.org/gmane.linux.bluez.user/3917 –
まあ、 'EMLINKはBluetoothエラー0x9'です(https://github.com/torvalds/linux/blob/1b1050cdc5cdde43177b375b5f22dc070d45d8f8/net/bluetooth/lib.c) –