Hi,

I believe I found a bug in the Xenomai Posix skin while trying to use boost::asio: The accept() call in asychronous mode fails with ENOPEM instead of EAGAIN. Other than that, the call 'works' in the sense that calling it again after a connection is established returns a new file descriptor.

I'm running xenomai rev 50ee47db78117e8711d4d2f5310dff262a425eb7 with kernel 2.6.31 i686.

Xenomai is built with no option (other than --enable-shared --disable-static) to configure.

I'm joining a simple C file to reproduce the problem.

Its output when built 'natively', and running "nc localhost 12345" after some time is:

-1 11
accept: Resource temporarily unavailable
-1 11
accept: Resource temporarily unavailable
<...>
OK 4

Its output when built using the posix skin and run as root is:
-1 1
accept: Operation not permitted
-1 1
accept: Operation not permitted
<...>
OK 4

The consequence of this bug is that all applications doing asynchronous accept() calls will fail to work, as they will incorrectly believe the operation failed.


Regards,

   Matthieu

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>

int main()
{
  int s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  int t = 1;
  int res;
  struct sockaddr_in sa;
  mlockall(MCL_PRESENT | MCL_FUTURE);
  if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(int)))
    perror("setsockopt");
  memset(&sa, 0, sizeof (sa));
  sa.sin_family = AF_INET;
  sa.sin_port = htons(12345);
  sa.sin_addr.s_addr = INADDR_ANY;
  
  if (bind(s, (struct sockaddr *)&sa, sizeof(sa)))
    perror("bind");
  if (listen(s, 128))
    perror("listen");
  t = 1;
  if (ioctl(s, FIONBIO, &t))
    perror("ioctl");
  do {
    res = accept(s, 0, 0);
    printf("%d %d\n", (int)res, (int)errno);
    perror("accept");
    usleep(500000);
  } while(res==-1);
  printf("OK %d\n", (int)res);
  return 0;
}

Attachment: config-2.6.31-xenomai.gz
Description: GNU Zip compressed data

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to