I am trying to implement the next code to scan for BLE devices:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>

int main(int argc, char **argv)
    inquiry_info *ii = NULL;
    int max_rsp, num_rsp;
    int dev_id, sock, len, flags;
    int i;
    char addr[19] = { 0 };
    char name[248] = { 0 };

    dev_id = hci_get_route(NULL);
    sock = hci_open_dev( dev_id );
    if (dev_id < 0 || sock < 0) {
        perror("opening socket");

    len  = 8;
    max_rsp = 255;
    flags = IREQ_CACHE_FLUSH;
    ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));

    num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
    if( num_rsp < 0 ) perror("hci_inquiry");

    for (i = 0; i < num_rsp; i++) {
        ba2str(&(ii+i)->bdaddr, addr);
        memset(name, 0, sizeof(name));
        if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), 
            name, 0) < 0)
        strcpy(name, "[unknown]");
        printf("%s  %s\n", addr, name);

    free( ii );
    close( sock );
    return 0;

The problem is that num_rsp is equal to zero, that is, it is not finding any device.

However, if I use the command $ sudo hcitool lescanin the terminal, it finds all the devices available.

Can anyone point me in the right direction to troubleshoot this? Is there any other way to implement hcitool lescan as C++ code?

Thanks in advance.

  • I got a valid answer at stackoverflow: stackoverflow.com/questions/38267072/…
    – D. Mellow
    Jul 14, 2016 at 7:40
  • If you've got a valid answer so please create an answer also to your question here and accept it after two days. Only this will finish the question and it will not pop up again and again for years.
    – Ingo
    Dec 16, 2019 at 15:50

1 Answer 1


I notice you have already found the library Gattlib to help you to write a C/C++ program to scan BLE devices with its example: https://github.com/labapart/gattlib/blob/master/examples/ble_scan/ble_scan.c

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.