2017-08-21 32 views
-1

私は接続するコードを書こうとしているラズベリー・パイ・ゼロWを持っています。 bind()コマンドは-1で失敗しています。私が代わりにmy_bdaddr_anyを使用していますが、それは、-1のリターンを取得するものであるRaspberry Pi bluez C++、なぜbind()関数は-1(失敗)を返しますか?

、一時のアドレスを取っ

:私はのコンパイルエラーを取得するように私はBDADDR_ANYを使用することはできません。 my_bdaddr_allまたはmy_bdaddr_localを使用すると、バインドは機能しますが、accept()は機能しません。私のコードスニペットは次のとおりです。

char buf[1024] = {0}; 
int bluetoothSocket, client, bytes_read;   
struct sockaddr_rc loc_addr = {0}; 
struct sockaddr_rc client_addr = {0}; 

socklen_t opt = sizeof(client_addr);  

bdaddr_t my_bdaddr_any = {0, 0, 0, 0, 0, 0}; 
bdaddr_t my_bdaddr_all = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 
bdaddr_t my_bdaddr_local = {0, 0, 0, 0xff, 0xff, 0xff};  

bluetoothSocket = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);  

loc_addr.rc_family = AF_BLUETOOTH; 
loc_addr.rc_bdaddr = (bdaddr_t &) my_bdaddr_all;     
loc_addr.rc_channel = (uint8_t) 1; 

int ret = -1; 

if(ret = bind(bluetoothSocket, (struct sockaddr *)&loc_addr, sizeof(loc_addr)) == -1)  
{ 
    printf("Bluetooth bind failed.\n"); 
    return 0; 
} 

listen(bluetoothSocket, 1); 

client = accept(bluetoothSocket, (struct sockaddr *)&client_addr, &opt); 

if (client == -1) 
{ 
    close(client);" 
} 

ba2str(&loc_addr.rc_bdaddr, buf); 
fprintf(stderr, "accepted connection from %s\n", buf); 
memset(buf, 0, sizeof(buf)); 

bytes_read = read(client, buf, sizeof(buf)); 
if (bytes_read > 0) 
{ 
    printf("Bluetooth bytes received [%s]\n", buf); 
} 
close(client); 
close(bluetoothSocket); 
return; 
+0

「errno」をチェックしましたか? –

+0

私はちょうど "Address already in use"というメッセージを受け取りました。それは意味をなさないが、私はよく調べる。以前はerrnoを取得する方法を見つけようとしていましたが、関数によって設定されたグローバル変数であり、このコードを追加するだけでした: 'printf(" Bluetooth bind failed。ERRNO =%d \ n "、errno); char * errorMessage = strerror_r(errno、buf、1024); printf( "%s \ n"、errorMessage); ' –

答えて

0

bind()の問題は、既にBluetoothデバイスにバインドされていた別のプログラムが原因です。なぜ私がbind()を-1にしたのかを調べるために、このコードを追加しました。

if (ret = bind(bluetoothSocket, (struct sockaddr *)&loc_addr, sizeof(loc_addr)) == -1) 
{ 
    printf("Bluetooth bind failed. ERRNO=%d\n", errno); 
    char *errorMessage = strerror_r(errno, buf, 1024); 
    printf("%s\n", errorMessage); 
    return 0; 
} 
関連する問題