From owner-freebsd-bluetooth@FreeBSD.ORG Wed Aug 22 21:21:54 2007 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 34C5C16A41A for ; Wed, 22 Aug 2007 21:21:54 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.185]) by mx1.freebsd.org (Postfix) with ESMTP id ADC9C13C48A for ; Wed, 22 Aug 2007 21:21:53 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by nf-out-0910.google.com with SMTP id b2so265574nfb for ; Wed, 22 Aug 2007 14:21:52 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=B6HyiTmTogXUkG8joVI0eMTBaiCpJG0QhdZVTEoK/5IL/q0LbZhhyx4qv29DPe2ZXUv4mx1Oc5AhKQ6QxFdaZMUaPbuO8HkTh0GnWR4na/IjdtMFMDpjC3aoEKGZluV6mJuz/c876Ly0AjGrNWM/aZvNoRrNrLOZlugwgZ9egtE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=KrZBKLBSklYvv/Y+pb69qL3ROKR04x+Tn394umnADld+Ap5Ia2FAtVR7S+PICefIYnThBRKVagUSQsn+08La/vgWkEdSeKUBVAEJVGsQg5I80EIKAQ5VcYM8iKY5t4hVU0QAGSjTSQZi2bbQ4lYAZKb6htFETJjyJ91xqMXhPCk= Received: by 10.86.81.8 with SMTP id e8mr797136fgb.1187817711874; Wed, 22 Aug 2007 14:21:51 -0700 (PDT) Received: by 10.86.25.9 with HTTP; Wed, 22 Aug 2007 14:21:51 -0700 (PDT) Message-ID: Date: Wed, 22 Aug 2007 14:21:51 -0700 From: "Maksim Yevmenkin" To: "Iain Hibbert" In-Reply-To: <1187726992.986273.1438.nullmailer@galant.ukfsn.org> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200708211228.02044.wundram@beenic.net> <1187726992.986273.1438.nullmailer@galant.ukfsn.org> Cc: "freebsd-bluetooth@freebsd.org" Subject: Re: Binding RFCOMM sockets X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Aug 2007 21:21:54 -0000 On 8/21/07, Iain Hibbert wrote: > On Tue, 21 Aug 2007, Maksim Yevmenkin wrote: > > > > I'm currently trying to implement a server over the RFCOMM layer, and at least > > > my imagination told me that connecting to channel 0 should select "any" free > > > RFCOMM channel (at least that's what I gathered from the BlueZ documentation, > > > which of course has nothing to do with the FreeBSD bluetooth stack, but > > > anyway ;-)). > > > > this is not currently implemented in freebsd > > nor in NetBSD - out of interest though, what is this server trying to > achieve? It does not seem especially useful to listen on 'any' channel, > given the way that bluetooth service discovery works.. well, the idea, imo, is when a server binds to 'any' channel (or psm), the kernel will automatically assign first available one. next, the application calls getsockname(2) to obtain the actual channel (or psm) that was assigned by the kernel and registers that channel (or psm) with sdp. this simplifies resource (i.e. channel or psm) management when multiple applications are trying to provide multiple services at the same time. basically you do not have to worry about assigning channels (or psm's) by hand. > btw where is this API documentation for BlueZ that you mention? I never > managed to find anything like that as I recall.. its part of the standard socket api, i.e. for tcp sockets it would look something like bzero(&sin, sizeof(sin)); sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = 0; s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); bind(s, (struct sockaddr *) &sin, sizeof(sin); listen(s, 10); len = sizeof(sin); getsockname(s, (struct sockaddr *) &sin, &len); > > > Anyway, binding to the 0 channel succeeds (with getsockname getting back the 0 > > > channel afterwards even though the socket is [supposedly] bound), but calling > > > listen() then gives me a EDESTADDRREQ, which I can't really sort into the > > > problem, as it isn't documented in man 2 listen either. > > > > basically it is trying to tell you that local address is invalid. > > (Max, maybe EADDRNOTAVAIL is better for that?) yes, i suppose it is. thanks, max