rfcomm socket cannot connect due to File descriptor in bad state

262 Views Asked by At

I am trying to connect sockets using rfcomm protocol.

but it fails and I get "File descriptor in bad state" error. this is my code:

void rfComm_peach_header(char *bdstr_addr)
{
char *savedbuf;
//struct sockaddr_l2 addr;
struct sockaddr_rc loc_addr = { 0 };
struct sockaddr_rc addr ;
char buf[1024] = { 0 };
int sock;
int deadstop=0, sndsize=0;

//this part works!
if(!(savedbuf = (char *) malloc ((int) BUFFER_SIZE + L2CAP_CMD_HDR_SIZE + 1))) {
    perror("[!] bss: can't malloc");
    exit(EXIT_FAILURE);
}
recoverrfcomm_peachhdr:
//this part works!
    if ((sock = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)) < 0) {
    perror("[!] bss: can't create socket");
    exit(EXIT_FAILURE);
}

memset(&addr, 0, sizeof(addr));
addr.rc_family = AF_BLUETOOTH;
addr.rc_channel = (uint8_t) channel;
bacpy(&addr.rc_bdaddr, &local_bdaddr);

 //this part works!
if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
    perror("[!] bss: can't bind socket");
    exit(EXIT_FAILURE);
}

str2ba(bdstr_addr, &addr.rc_bdaddr);

//this fails!

 `int accept_sock=accept(sock, (struct sockaddr *)&addr, sizeof(addr));`


if (connect(accept_sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
            perror("[!] bss: can't connect.");
            exit(EXIT_FAILURE);

}

if someone could review this I would appreciate it very much.

BTY: I ran similar code with same computer address with L2Cap protocol and it works fine.

0

There are 0 best solutions below