+int hci_open_device_nonblock(int dev_id){
+ struct sockaddr_hci address;
+ int dd;
+ int oldflag;
+
+ if((dd=socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI))<0){
+ perror("socket no created");
+ return dd; //it return -1 when socket isn't created
+ }
+
+ oldflag=fcntl(dd, F_GETFL, 0);
+ if(fcntl(dd, F_SETFL, oldflag | O_NONBLOCK) < 0){
+ printf("problem with socket flag setting");
+ return -1;
+ }
+
+ memset(&address,0,sizeof(address));
+ address.hci_family=AF_BLUETOOTH;
+ address.hci_dev=dev_id;
+ if(bind(dd,(struct sockaddr *) &address, sizeof(address))<0){
+ perror("Socket not binded to hci device");
+ close(dd);
+ return -1;
+ }
+
+ return dd;
+}
+