From: Joel Reymont <joelr1@gmail.com>
To: OCaml List <caml-list@inria.fr>
Subject: Serious bug in the OCaml FFI?
Date: Sat, 5 May 2007 15:13:44 +0100 [thread overview]
Message-ID: <307C6D82-55E3-42AD-B0B1-8C1DFC22394A@gmail.com> (raw)
In-Reply-To: <C40E6377-A236-4AAB-8B77-AD5A8CD93E27@gmail.com>
I'm using 32-bit Mac OSX 10.4.9 Intel.
I inserted a print-out into my version of socketpair.c [1] and ran my
OCaml test script
#use "topfind";;
#require "unix";;
let x, y = Unix.socketpair Unix.PF_UNIX Unix.SOCK_STREAM 0;;
Unix.getpeername y;;
which resulted in
unix_socketpair: domain = 1, type = 1, proto = 0
Exception: Unix.Unix_error (Unix.EAFNOSUPPORT, "", "").
Back at the toplevel
# (Obj.magic Unix.PF_UNIX:int);;
- : int = 0
# (Obj.magic Unix.SOCK_STREAM:int);;
- : int = 0
Now, how exactly does 0 become 1 here? I have no idea but there are
two tables defined in otherlibs/unix/socket.c:
int socket_domain_table[] = {
PF_UNIX, PF_INET,
#if defined(HAS_IPV6)
PF_INET6
#elif defined(PF_UNDEF)
PF_UNDEF
#else
0
#endif
};
int socket_type_table[] = {
SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_SEQPACKET
};
As you can see, instead of calling socketpair with PF_UNIX and
SOCK_STREAM), Ocaml is calling it with PF_INET6 and SOCK_DGRAM instead.
This is obviously a major problem. Any suggestions on what may be
causing it and how to fix it?
Thanks, Joel
[1] otherlibs/unix/socketpair.c
CAMLprim value unix_socketpair(value domain, value type, value proto)
{
int sv[2];
value res;
printf("unix_socketpair: domain = %d, type = %d, proto = %d\n",
socket_domain_table[Int_val(domain)],
socket_type_table[Int_val(type)],
Int_val(proto));
if (socketpair(socket_domain_table[Int_val(domain)],
socket_type_table[Int_val(type)],
Int_val(proto), sv) == -1)
uerror("socketpair", Nothing);
res = alloc_small(2, 0);
Field(res,0) = Val_int(sv[0]);
Field(res,1) = Val_int(sv[1]);
return res;
}
--
http://wagerlabs.com/
next prev parent reply other threads:[~2007-05-05 14:13 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-05 12:40 ocamlnet: EAFNOSUPPORT on Max OSX Joel Reymont
2007-05-05 12:50 ` Joel Reymont
2007-05-05 12:57 ` [Caml-list] " Richard Jones
2007-05-05 14:00 ` Joel Reymont
2007-05-05 13:53 ` Mac OSX getsocketpair/getsockname and IPv6 Joel Reymont
2007-05-05 14:13 ` Joel Reymont [this message]
2007-05-05 14:56 ` [Caml-list] Serious bug in the OCaml FFI? Olivier Andrieu
2007-05-05 15:24 ` Joel Reymont
2007-05-05 14:31 ` Mac OSX getsocketpair/getsockname and IPv6 Joel Reymont
2007-05-05 15:16 ` Solved! (was Re: Mac OSX getsocketpair/getsockname and IPv6) Joel Reymont
2007-05-06 10:05 ` [Caml-list] " Gerd Stolpmann
2007-05-28 17:08 ` Paul Snively
2007-05-05 14:46 ` Mac OSX getsocketpair/getsockname and IPv6 Joel Reymont
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=307C6D82-55E3-42AD-B0B1-8C1DFC22394A@gmail.com \
--to=joelr1@gmail.com \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox