caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
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/






  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;
as well as URLs for NNTP newsgroup(s).