2006-11-03 20:36:27

by Olivier Le Pogam

[permalink] [raw]
Subject: [Bluez-devel] To blueZ developers : can't do two "connect" concurrently, help required !

Hi,

For the ones who have read my messages a few days ago ...
I am still performing concurrency tests !

I run a server on 2 remote devices (one on channel 24, the
other on channel 25), and I try to connect to them concurrently
from the same Linux box / BT key (the remote servers are simple "echo"
ones, the linux client is sending numbers from 1 to 10 with a sleep(1) at
each step).

I have a simple batch :

client.sh :
./client 00:16:4E:83:2D:19 25 &
./client 00:0D:88:9B:FF:D7 24 &

where client is called with BDADDR and channel

Here is what I get in my logs :

Connection to remote 00:16:4E:83:2D:19 channel 25
Connection to remote 00:0D:88:9B:FF:D7 channel 24
[00:16:4E:83:2D:19] Can't connect(111) ====> 111 is connection refused
[00:0D:88:9B:FF:D7] Connected to remote 00:0D:88:9B:FF:D7 channel 24, from local 00:11:67:0D:2E:2C channel 24
[00:0D:88:9B:FF:D7] Sent 0 received 0
...

If I swap the order of calling "client" i.e :

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;
}


Attachments:
(No filename) (147.00 B)
"AVG certification"
(No filename) (373.00 B)
(No filename) (164.00 B)
Download all attachments

2006-11-04 16:42:40

by Peter Wippich

[permalink] [raw]
Subject: Re: [Bluez-devel] To blueZ developers : can't do two "connect" concurrently, help required !


Hi Oli,

On Fri, 3 Nov 2006, Olivier Le Pogam wrote:

> Hi,
>
> For the ones who have read my messages a few days ago ...
> I am still performing concurrency tests !
>
> I run a server on 2 remote devices (one on channel 24, the
> other on channel 25), and I try to connect to them concurrently
> from the same Linux box / BT key (the remote servers are simple "echo"
> ones, the linux client is sending numbers from 1 to 10 with a sleep(1) at
> each step).
>
> So basically, it seems that there can't be two "connect"
> concurrently on the same adaptor.
>
> Can please BlueZ developers confirm ?

This has been discussed here several times. I think Marcel has done
something here. Have you tried the latest MH patch ?? (have not tried it
by myself).

Ciao,

Peter



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

2006-11-03 21:26:28

by Brad Midgley

[permalink] [raw]
Subject: Re: [Bluez-devel] To blueZ developers : can't do two "connect" concurrently, help required !

Olivier

This thing tends to happen if you have the wrong end of the connection
being master. Make sure your linux box has master in the lm line in
hcid.conf and that your clients do not.

Brad

> For the ones who have read my messages a few days ago ...
> I am still performing concurrency tests !
>
> I run a server on 2 remote devices (one on channel 24, the
> other on channel 25), and I try to connect to them concurrently
> from the same Linux box / BT key (the remote servers are simple "echo"
> ones, the linux client is sending numbers from 1 to 10 with a sleep(1) at
> each step).
>
> I have a simple batch :
>
> client.sh :
> ./client 00:16:4E:83:2D:19 25 &
> ./client 00:0D:88:9B:FF:D7 24 &
>
> where client is called with BDADDR and channel
>
> Here is what I get in my logs :
>
> Connection to remote 00:16:4E:83:2D:19 channel 25
> Connection to remote 00:0D:88:9B:FF:D7 channel 24
> [00:16:4E:83:2D:19] Can't connect(111) ====> 111 is connection refused
> [00:0D:88:9B:FF:D7] Connected to remote 00:0D:88:9B:FF:D7 channel 24,
> from local 00:11:67:0D:2E:2C channel 24
> [00:0D:88:9B:FF:D7] Sent 0 received 0
> ...
>
> If I swap the order of calling "client" i.e :
>
> 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;
> }
>
>
> ------------------------------------------------------------------------
>
> No virus found in this outgoing message.
> Checked by AVG Free Edition.
> Version: 7.1.409 / Virus Database: 268.13.25/515 - Release Date: 03/11/2006
>
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Bluez-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/bluez-devel


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel