delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2015/03/30/08:37:09

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:reply-to
:references:mime-version:content-type:in-reply-to; q=dns; s=
default; b=aQCqMgg1Be/RowNMlC3mI3lcHPTLi/tc7WAmNjhjUDKpsi5v9/vl6
8JMeAWwEcE5kaA71/1HylOoVFCHUzrk9OyAhKD6F6BCicfGhuqrUgZyoVzV0ZRAK
UqKdXv5TCR2lLbGcnivD2mvK8tHJEY65Ra3cMASliFRNAA4QWSlPp0=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:reply-to
:references:mime-version:content-type:in-reply-to; s=default;
bh=zN92F62JuScq+H9USChUlkt/Z3U=; b=Q8hRlfFfRod7pr+3fKINTS96r7T8
GZ5NYmucwVBmbKVzVr64sXoX4t4zrWg1F81TBglf29uXdn7HwAIXi5Flj7yHdfHs
HuzgMlOIaggwgDH4nCbr6L15QGiXQjV0pZoWIigXnJmTWd5d0T8WuGjeTFcG9Dzh
qOz8hkpuEzUusKo=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=-4.6 required=5.0 tests=AWL,BAYES_50 autolearn=ham version=3.3.2
X-HELO: calimero.vinschen.de
Date: Mon, 30 Mar 2015 14:36:43 +0200
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: Handles returned by mq_open are not valid file descriptors as supposed to be under native linux distributions
Message-ID: <20150330123643.GC10785@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <556891A1F0F6154CB3DD7811A49431534D3B8027 AT FOWEXMC003 DOT de DOT astrium DOT corp>
MIME-Version: 1.0
In-Reply-To: <556891A1F0F6154CB3DD7811A49431534D3B8027@FOWEXMC003.de.astrium.corp>
User-Agent: Mutt/1.5.23 (2014-03-12)

--PmA2V3Z32TCmWXqI
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mar 27 09:30, KEREP, Mladen wrote:
> We're using POSIX message queues to pass messages between processes.
> For this we've build a library layer to be able to use message queues
> on different platforms. Basically linux (debian, Ubuntu, archlinux,
> rasbian) is the development platform, but also vxworks platforms are
> supported.
>=20
> Several message queues are opened through mq_open calls and the
> returned handles are organized in file descriptor sets (fd_set). The
> set is then passed over to a select(2) call, which blocks processing
> and returns as soon as any message in any of the queues arrives.
>=20
> This works under linux, since the handles returned are valid file
> descriptors and the macros FD_ZERO / FD_SET are able to handle that
> handles.
>=20
> However, under Cygwin,

For a start, since what you're doing sounds pretty commercial to me,
may I point out https://cygwin.com/licensing.html?  May I assume your
code is open source?

> mq_open does not directly return file handles,
> but pointers to (unknown) data structures in memory (ref.
> http://sourceware.org/ml/cygwin/2013-07/msg00179.html), which cannot
> be used with FD_ZERO, FD_SET, so not with select(2). I know from the
> man pages (mq_open): "Polling message queue descriptors On Linux, a
> message queue descriptor is actually a file descriptor, and can be
> monitored using select(2), poll(2), or epoll(7).  This is not
> portable."
>=20
> mq_open() and select() conform to POSIX.1-2001, at least under linux,
> but also under Cygwin ?  How can this be modified, so that it works
> under Cygwin as well ?

"This is not portable" is the important hint in the Linux man page.  On
Cygwin we're using basically the implementation from W. Richard Stevens,
as published for his book "UNIX Network Programming, Volume 2,
Interprocess communication".  It doesn't support the Linux extensions
but, yes, it's POSIX compliant, see POSIX.1-2008:

 "A message queue descriptor *may* be implemented using a file descriptor,
  in which case applications can open up to at least {OPEN_MAX} file and
  message queues." [emphasis mine]

Note that mq_open doesn't return an int, but a special message queue type
mqd_t for a reason.  Again, if you use message queues with select, you're
creating non-portable code.

Having said that, it *would* be possible to change the implementation to
make mqd_t a file descriptor and to support the Linux extension, but I'm
not planning to do so for the time being.

But, as always, patches are welcome.


Corinna

--=20
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

--PmA2V3Z32TCmWXqI
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBAgAGBQJVGUNbAAoJEPU2Bp2uRE+gXfgQAJV0+8caP3vAMdWrRiiccyZb
yHaVh4p6k/FtyqOnOZzuqUVcTcwqZ9bypqkIPwh1lH1MOvwYxE4biA5y9DvlzW0k
TcU7215HYuC7EkYREHCuK+mQPBWBOomQXDpWqdd07MZ9CyG8dQFgfIbsmaWZYp5d
K/dirIBoZAnSWsGKfTez9HonDDgaOrGNSH9rgJSAWRocjQmWD6YEF9m4v5ITCmPy
8RgaHAkgvgczSqxVxzVpwgxvT92+wPLI0XV3g99jVJr+8DI2SI1vb3EWw1Lsk4Dy
/ClEzmlt7GAgxxHJ/K9s66a8hUXR/m6OaMxsXl5sD1Q8moF1FHe5xPLpu+pRgj6M
SW1SEjUESfnWBDBMv73/fHdQxiWf+4bsWpN5x2YxV4NW00FoN4ZoUis+VZ8VJy7d
VUMTYnf5yoFzOV18ZQvxMXe1nTiZsn+TGCjZ/wOhbO+KY14wBRGYkNZhTiYbe95p
uh46Y5rIwnJzoJIulNuEueXQSLLIitL/kySY72xvKh0jruqocPqNLRt12kEQOdGQ
OPbzIJraJjL19SILurNJIRqaJyaNiCpoObAqV3JK0GJ6G47Wd9L1KuqrANb1e94m
qtM9D1YmhOklxPyZVPslymElo2vzNIvsYl14kXhXowwZH6mjJWtXwZDSGU09EZdN
nVMjMqe8IZMKni3Sjlq2
=96+a
-----END PGP SIGNATURE-----

--PmA2V3Z32TCmWXqI--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019