2

以下はコードです。これはもともと 1.8.7 用に作成されたもので、2006 年以降は変更されていません。姉妹関数 bt_rfcomm_socket_connect() を GetOpenFile() を使用せずに動作させることに成功しましたが、可能であれば Ruby Way(tm) で実行したいと考えています。

263 static VALUE
264 bt_l2cap_socket_connect(VALUE self, VALUE host, VALUE port)
265 {
266   fprintf(stderr, "connecting!\n");
267     rb_io_t *fptr;
268     int fd;
269 
270     VALUE tmp = rb_check_convert_type(self, T_FILE, "IO", "to_io");
271 
272     fprintf(stderr,"Getting open file\n");
273     GetOpenFile(tmp, fptr);
274 
275     fprintf(stderr, "got open file\n");
276     fd = fptr->fd;
277 
278     fprintf(stderr, "structing\n");
279     struct sockaddr_l2 addr = { 0 };
280     char *dest = STR2CSTR(host);
281 
282     fprintf(stderr, "setting addr info\n");
283     // set the connection parameters (who to connect to)
284     addr.l2_family = AF_BLUETOOTH;
285     addr.l2_psm = (uint8_t) FIX2UINT(port);
286     str2ba( dest, &addr.l2_bdaddr );
287 
288     // connect to server
289     if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
290       fprintf(stderr, "connected!\n");
291         rb_sys_fail("connect(2)");
292     }
293 
294     return INT2FIX(0);
295 }

root から実行した場合でも、以下のようになります。

bperry@bperry:~/work/rubytooth$ rvmsudo ruby sample_program.rb 
6
Doing something with a port: 4097
connecting!
Getting open file
sample_program.rb:20:in `connect': closed stream (IOError)
    from sample_program.rb:20:in `<main>'
bperry@bperry:~/work/rubytooth$ 
4

0 に答える 0