Jan Kiszka wrote: > Gilles Chanteperdrix wrote: > >> Jan Kiszka wrote: >> >>> Matthieu Nottale wrote: >>> >>>> 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. >>>> >>> On what kind of file descriptor descriping what kind of socket are you >>> calling accept()? So far I'm not aware of any RTDM driver providing the >>> corresponding service - well, at least not a public one (our RT-TCP >>> stack is yet to be released). Or is it intended to pass the call to >>> plain Linux, switching the caller into secondary more? >>> >> There's a sample attached. Yes, it is a TCP stream. Howeve accept is >> wrapped, so it may happen that EPERM is the result of the wrapping. >> >> > > Oops, missed that. Indeed, patch below should fix it. > > Jan > > diff --git a/src/skins/posix/rtdm.c b/src/skins/posix/rtdm.c > index 6e347fb..4e6685f 100644 > --- a/src/skins/posix/rtdm.c > +++ b/src/skins/posix/rtdm.c > @@ -404,18 +404,21 @@ int __wrap_accept(int fd, struct sockaddr *addr, > socklen_t * addrlen) > > pthread_setcanceltype(oldtype, NULL); > > - if (fd >= 0) > - fd += __rtdm_fd_start; > + if (fd < 0) > + return set_errno(fd); > + > + return fd + __rtdm_fd_start; > } else { > fd = __real_accept(fd, addr, addrlen); > > if (fd >= __rtdm_fd_start) { > __real_close(fd); > - fd = -EMFILE; > + errno = EMFILE; > + fd = -1; > } > - } > > - return set_errno(fd); > + return fd; > + } > } > > int __wrap_getsockname(int fd, struct sockaddr *name, socklen_t * namelen) > > Thank you very much for this quick correction, without much knowledge of xenomai I was afraid the fix would be much more complicated.
Best regards, Matthieu _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core