client.sh :
./client 00:0D:88:9B:FF:D7 24
&
./client 00:16:4E:83:2D:19 25 &
Then it's still the first which can't connect (now it will be
00:0D:88:9B:FF:D7)
So basically, it seems that there can't be
two "connect"
concurrently on the same adaptor.
Can please BlueZ developers confirm ?
Thanks a lot
Oli
For who is interested, here is the interesting part of client.c :
int main(int argc, char **argv)
{
struct
sockaddr_rc laddr, raddr;
int sk, i;
memset(&laddr, 0,
sizeof(laddr));
memset(&raddr, 0,
sizeof(raddr));
laddr.rc_family = AF_BLUETOOTH;
bacpy(&laddr.rc_bdaddr, BDADDR_ANY);
laddr.rc_channel
= 0;
raddr.rc_family = AF_BLUETOOTH;
str2ba(argv[1], &raddr.rc_bdaddr);
raddr.rc_channel =
atoi(argv[2]);
if (argc != 3) {
fprintf(stderr,"Usage: client address channel\n");
exit(EXIT_FAILURE);
}
debugOutput("Connection to remote %s channel %s", argv[1],
argv[2]);
sk = socket(AF_BLUETOOTH, SOCK_STREAM,
BTPROTO_RFCOMM);
if (sk < 0)
{
debugOutput("[%s] Can't create
RFCOMM socket", argv[1]);
return
-1;
}
if (bind(sk, (struct sockaddr *)&laddr,
sizeof(laddr)) < 0) {
debugOutput("[%s] Can't bind RFCOMM socket",
argv[1]);
close(sk);
return
-1;
}
if (connect(sk, (struct sockaddr *)&raddr,
sizeof(raddr)) < 0) {
debugOutput("[%s] Can't connect(%d)", argv[1],
errno);
close(sk);
return
-1;
}
char loc_addr[30];
strcpy(loc_addr,
"");
int len = sizeof(laddr);
if (getsockname (sk, &laddr, &len ) >
0)
debugOutput("[%s] Can't getsockname",
argv[1]);
else ba2str(&laddr.rc_bdaddr,
loc_addr);
debugOutput("[%s] Connected to remote %s
channel %s, from local %s channel %d", argv[1], argv[1], argv[2], loc_addr,
laddr.rc_channel);
for (i = 0; i<10;
i++)
{
char buf[1024];
sprintf(buf,
"%d%c", i, 10);
write(sk, buf,
strlen(buf));
strcpy(buf,
"");
readString(sk, buf);
if(
strlen(buf) > 0 ) {
debugOutput("[%s] Sent %d received
%s", argv[1], i, buf);
} else
{
debugOutput("[%s] Sent %d received no answer", argv[1],
i);
break;
}
sleep(1);
}
close(sk);
debugOutput("[%s] Disconnected", argv[1]);
return 0;
}