Thread (4 messages) flat view 4 messages, 2 authors, 2003-07-24

Re: [Bluez-devel] EBADFD on RFComm connect

From: Max Krasnyansky <hidden>
Date: 2003-07-23 00:33:15

At 06:29 AM 7/22/2003, Stephen Crane wrote:
Hi Max, Marcel,
Under what circumstances can connect() return EBADFD?

I have a couple of programs (attached) one of which opens a listening
socket and accepts 32 connections. The other loops attempting 32
connections to the same channel. On the second connection connect()
always fails with EBADFD. (If I leave in the 0.5 second delay it all
works fine.)
You can not do this
        while (0 > connect(s, (struct sockaddr *)&addr, sizeof(addr)))
               if (errno != EBUSY) {
                   perror("connect");
                   return -1;
               }

If connect returns EBUSY error you have to close() the socket. And it does
indeed return EBUSY in your case (I ran the progs) because close() is asynchronous
and that channel still exist (two connections on the same channel are not allowed 
in RFCOMM). What you can do to avoid that error is to enable SO_LINGER option on that
socket, in which case close() will be synchronous. 

Max
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help