Date: Thu, 4 Aug 2016 15:14:49 +0800 From: Julian Elischer <julian@freebsd.org> To: "Lundberg, Johannes" <johannes@brilliantservice.co.jp>, Alan Somers <asomers@freebsd.org> Cc: FreeBSD Current <freebsd-current@freebsd.org> Subject: Re: Socket sendmsg() porting question Message-ID: <c95db00e-7dd7-92c4-1967-d842fa6144a1@freebsd.org> In-Reply-To: <CAASDrVnPQJwE7krZ9ufGu=85CCMejnZCSyStq3%2BL_iSp32VthQ@mail.gmail.com> References: <CAASDrVmKcO8Gi%2BROhsKpsSRTCsgx5COvGVX6MpGcS3SDG%2Bj22g@mail.gmail.com> <CAOtMX2goeBHoPa2mu7euw7gX8prtzJGg6c6bsLJZHYJeagFYDw@mail.gmail.com> <CAASDrVnPQJwE7krZ9ufGu=85CCMejnZCSyStq3%2BL_iSp32VthQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 4/08/2016 1:18 AM, Lundberg, Johannes wrote: > Hi Alan > > Thanks for the reply. > > Can I still use the same receiving function for sendmsg/send and tell what > kind of message is coming? > How would I tell if there is an fd attached or not? > > Even if I set cmsg_level and cmsg_type it won't let me send it. The problem > is having a zero length attachment on freebsd.... > I can't send -1 as fd because that errors to invalid file descriptor. > > > On Wed, Aug 3, 2016 at 10:12 AM, Alan Somers <asomers@freebsd.org> wrote: > >> On Wed, Aug 3, 2016 at 10:54 AM, Lundberg, Johannes >> <johannes@brilliantservice.co.jp> wrote: >>> Hi >>> >>> I'm porting a project to fbsd and I have problem with this part that >> works >>> in linux but not fbsd when fd = -1. >>> >>> https://github.com/Cloudef/wlc/blob/master/src/session/fd.c#L80-L108 >>> >>> I get "invalid argument" from sendmsg() when setting CMSG_LEN(0). >>> >>> Anyone have a clue how to correctly do this on fbsd? >>> >>> Thanks! >>> >>> Johannes >>> >> It sounds like you're trying to send an empty cmsg. The error may >> happen because your msg_controllen field is inconsistent with your >> cmsg_len field. You're setting msg_controllen as if there were a full >> cmsg, but then cmsg_len says that there is no cmsg. Or maybe the >> error is because (just guessing) FreeBSD doesn't allow sending empty >> or undefined cmsgs. Notice that cmsg_level and cmsg_type are >> undefined in the case where fd == -1. POSIX doesn't say whether >> sendmsg supports empty cmsgs, but why bother? You could just use send >> instead of sendmsg if you're not sending a file descriptor. >> >> -Alan >> I think it's a standards interpretation thing. what data do you send WITH the message? I assume you have some in-band data as well. if you have no FD, just use "sendto()." the other end will still be able to do a recvmesg() but will discover no added info.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?c95db00e-7dd7-92c4-1967-d842fa6144a1>