[zeromq-dev] ZMQ vs SPI: FD shenanigans

Arnaud Kapp kapp.arno at gmail.com
Tue Jan 20 18:07:27 CET 2015


Hello,

I don't really see anything in the small example that could cause a bug.
I am myself using libzmq (with zmqpp as a wrapper) on a Raspberry Pi +
a Piface digital card (which is a SPI device), and I have no trouble.

My kernel version is 3.12.28+ and I use a recent (a few commits behind
HEAD) version of libzmq.

On Tue, Jan 20, 2015 at 4:28 PM, Thomas Rodgers <rodgert at twrodgers.com> wrote:
> No, not really. libc++ doesn't do anything particularly interesting with
> fd's but I just wanted to formally rule it out.
> Unfortunately I don't have a system (or any experience dealing) with SPI
> devices. I don't think libzmq does anything particularly 'funky' with any of
> the file descriptors it manages though (at least based on my reading of the
> source).
>
> On Tue, Jan 20, 2015 at 8:56 AM, Olaf Mandel <o.mandel at menlosystems.com>
> wrote:
>>
>> Hello Thomas,
>>
>> thank you for the quick answer.
>>
>> Am 20.01.2015 15:11, schrieb Thomas Rodgers:
>> > Do you see the same behavior if you replace C with fopen() ?
>> -Snipp-
>>
>> Not quite: if the error occurs, the behaviour is the same as before. But
>> now the error _always_ happens: closing the file descriptor in the C
>> version of the test makes no difference. New test below:
>>
>>
>> /*
>>  *  Compile with:
>>  *  g++ -Wall -Werror -Wextra -pedantic -x c -o test test.c -lzmq
>>  */
>> #include <fcntl.h>
>> #include <linux/spi/spidev.h>
>> #include <stdio.h>
>> #include <string.h>
>> #include <sys/ioctl.h>
>> #include <zmq.h>
>>
>>
>> /*#define ADDR "tcp://127.0.0.1:8000"*/
>> #define ADDR "inproc://addr"
>>
>>
>> /*
>>  *  The program always shows the problem (independent of the presence
>>  *  of D) for the following permutations of the blocks:
>>  *  - A B C D
>>  *  - A C B D
>>  *  - A C D B
>>  *  - C A B D
>>  *  - C A D B
>>  *  - C D A B
>>  *
>>  *  With the constraint that A must be before B and C before D, there
>>  *  are no further valid permutations.
>>  *
>>  *  For the TCP address, the error message is: No such device
>>  *  For the inproc address, it is: Resource temporarily unavailable
>>  */
>> int main()
>> {
>>     void*  ctx;
>>     void*  skt;
>>     FILE*  f;
>>     int    fd;
>>     struct spi_ioc_transfer pcks;
>>
>>     ctx = zmq_ctx_new();            /* A */
>>
>>     skt = zmq_socket(ctx, ZMQ_PUB); /* B */
>>     zmq_bind(skt, ADDR);
>>
>>     f = fopen("log", "w");          /* C */
>>     (void)sizeof(f);
>>
>>     fclose(f);                      /* D */
>>
>>     /* The following always last */
>>     fd = open("/dev/spidev32766.0", O_RDWR);
>>     memset(&pcks, 0, sizeof(struct spi_ioc_transfer));
>>     ioctl(fd, SPI_IOC_MESSAGE(1), &pcks);
>>     printf("errno: %s\n", strerror(errno));
>>
>>     return 0;
>> }
>>
>>
>> The one advantage of this is: I now at least can see the FILE structure
>> and the contained _fileno member.
>>
>> Any further thoughts?
>> Olaf Mandel
>> --
>> Olaf Mandel
>> phone: +49-89-189166-250
>> fax:   +49-89-189166-111
>> Menlo Systems GmbH
>> Am Klopferspitz 19a, D-82152 Martinsried
>> Amtsgericht München HRB 138145
>> Geschäftsführung: Dr Michael Mei, Dr Ronald Holzwarth
>> USt-IdNr. DE217772017, St.-Nr. 14316170324
>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>



-- 
Kapp Arnaud - Xaqq



More information about the zeromq-dev mailing list