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 4The 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;
}
config-2.6.31-xenomai.gz
Description: GNU Zip compressed data
_______________________________________________ Xenomai-core mailing list [email protected] https://mail.gna.org/listinfo/xenomai-core
