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