| // // Explicitly link libbluetooth and other libraries as "go build" cannot |
| // // figure out these dependencies.. |
| // #cgo LDFLAGS: -lbluetooth |
| // listener waits for incoming RFCOMM connections on the provided socket. |
| // It implements the net.Listener interface. |
| // Implements the net.Listener interface. |
| func (l *listener) Accept() (net.Conn, error) { |
| if es := C.bt_accept(C.int(l.socket), &fd, &remoteMAC); es != nil { |
| defer C.free(unsafe.Pointer(es)) |
| return nil, fmt.Errorf("error accepting connection on %s, socket: %d, error: %s", l.localAddr, l.socket, C.GoString(es)) |
| defer C.free(unsafe.Pointer(remoteMAC)) |
| if remote.mac, err = net.ParseMAC(C.GoString(remoteMAC)); err != nil { |
| return nil, fmt.Errorf("invalid remote MAC address: %s, err: %s", C.GoString(remoteMAC), err) |
| // There's no way to get accurate remote channel number, so use 0. |
| // Implements the net.Listener interface. |
| func (l *listener) Close() error { |
| return syscall.Close(l.socket) |
| // Implements the net.Listener interface. |
| func (l *listener) Addr() net.Addr { |