From 1e664b94467a65841e63d2dea50cd1f64e8a3258 Mon Sep 17 00:00:00 2001
From: Xavier Leroy <xavier.leroy@inria.fr>
Date: Wed, 3 Sep 1997 14:38:02 +0000
Subject: Implementation du type file_descr par le type HANDLE de Win32. 
 Court-circuite la libc de MSVC.

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1700 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
---
 otherlibs/win32unix/accept.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)

(limited to 'otherlibs/win32unix/accept.c')

diff --git a/otherlibs/win32unix/accept.c b/otherlibs/win32unix/accept.c
index cbd7e1ed0..db0362714 100644
--- a/otherlibs/win32unix/accept.c
+++ b/otherlibs/win32unix/accept.c
@@ -20,33 +20,29 @@
 value unix_accept(sock)          /* ML */
      value sock;
 {
-  SOCKET s;
-  value res;
-  int fd;
+  SOCKET sconn = (SOCKET) Handle_val(sock);
+  SOCKET snew;
+  value fd = Val_unit, adr = Val_unit, res;
   int optionValue;
-  HANDLE h;
-  value adr = Val_unit;
 
   /* Set sockets to synchronous mode  */
   optionValue = SO_SYNCHRONOUS_NONALERT;
   setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, 
              (char *)&optionValue, sizeof(optionValue));
 
-  Begin_root (adr);
-    sock_addr_len = sizeof(sock_addr);
-    enter_blocking_section();
-    s = accept((SOCKET) _get_osfhandle(Int_val(sock)),
-               &sock_addr.s_gen, &sock_addr_len);
-    leave_blocking_section();
-    if (s == INVALID_SOCKET) {
-      _dosmaperr(WSAGetLastError());
-      uerror("accept", Nothing);
-    }
+  sock_addr_len = sizeof(sock_addr);
+  enter_blocking_section();
+  snew = accept(sconn, &sock_addr.s_gen, &sock_addr_len);
+  leave_blocking_section();
+  if (snew == INVALID_SOCKET) {
+    _dosmaperr(WSAGetLastError());
+    uerror("accept", Nothing);
+  }
+  Begin_roots2 (fd, adr)
+    fd = win_alloc_handle((HANDLE) snew);
     adr = alloc_sockaddr();
     res = alloc_tuple(2);
-    fd = _open_osfhandle(s, 0);
-    if (fd == -1) uerror("accept", Nothing);
-    Field(res, 0) = Val_int(fd);
+    Field(res, 0) = fd;
     Field(res, 1) = adr;
   End_roots();
   return res;
-- 
cgit v1.2.3-70-g09d2