diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2002-04-30 15:00:48 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2002-04-30 15:00:48 +0000 |
commit | c98047f62764eab650f7495e50d0e1d63d53ac88 (patch) | |
tree | 3f26e1884beacb4fe6042fe60ca2bd7e093c5f79 /otherlibs/win32unix/read.c | |
parent | 044ac150e8b5763047b77757e9144a920fb49a42 (diff) |
Meilleure distinction handle/socket. Ajout lockf. Revu rename.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4765 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs/win32unix/read.c')
-rw-r--r-- | otherlibs/win32unix/read.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/otherlibs/win32unix/read.c b/otherlibs/win32unix/read.c index d970cc321..2c727173e 100644 --- a/otherlibs/win32unix/read.c +++ b/otherlibs/win32unix/read.c @@ -22,19 +22,32 @@ CAMLprim value unix_read(value fd, value buf, value ofs, value len) { DWORD numbytes, numread; - BOOL ret; char iobuf[UNIX_BUFFER_SIZE]; - HANDLE h = Handle_val(fd); Begin_root (buf); numbytes = Long_val(len); if (numbytes > UNIX_BUFFER_SIZE) numbytes = UNIX_BUFFER_SIZE; - enter_blocking_section(); - ret = ReadFile(h, iobuf, numbytes, &numread, NULL); - leave_blocking_section(); - if (! ret) { - win32_maperr(GetLastError()); - uerror("read", Nothing); + if (Descr_kind_val(fd) == KIND_SOCKET) { + int ret; + SOCKET s = Socket_val(fd); + enter_blocking_section(); + ret = recv(s, iobuf, numbytes, 0); + leave_blocking_section(); + if (ret == SOCKET_ERROR) { + win32_maperr(WSAGetLastError()); + uerror("read", Nothing); + } + numread = ret; + } else { + BOOL ret; + HANDLE h = Handle_val(fd); + enter_blocking_section(); + ret = ReadFile(h, iobuf, numbytes, &numread, NULL); + leave_blocking_section(); + if (! ret) { + win32_maperr(GetLastError()); + uerror("read", Nothing); + } } memmove (&Byte(buf, Long_val(ofs)), iobuf, numread); End_roots(); |