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/write.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/write.c')
-rw-r--r-- | otherlibs/win32unix/write.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/otherlibs/win32unix/write.c b/otherlibs/win32unix/write.c index ce7429d05..5c0e54e3d 100644 --- a/otherlibs/win32unix/write.c +++ b/otherlibs/win32unix/write.c @@ -24,9 +24,7 @@ CAMLprim value unix_write(value fd, value buf, value vofs, value vlen) { long ofs, len, written; DWORD numbytes, numwritten; - BOOL ret; char iobuf[UNIX_BUFFER_SIZE]; - HANDLE h = Handle_val(fd); Begin_root (buf); ofs = Long_val(vofs); @@ -35,12 +33,27 @@ CAMLprim value unix_write(value fd, value buf, value vofs, value vlen) while (len > 0) { numbytes = len > UNIX_BUFFER_SIZE ? UNIX_BUFFER_SIZE : len; memmove (iobuf, &Byte(buf, ofs), numbytes); - enter_blocking_section(); - ret = WriteFile(h, iobuf, numbytes, &numwritten, NULL); - leave_blocking_section(); - if (! ret) { - win32_maperr(GetLastError()); - uerror("write", Nothing); + if (Descr_kind_val(fd) == KIND_SOCKET) { + int ret; + SOCKET s = Socket_val(fd); + enter_blocking_section(); + ret = send(s, iobuf, numbytes, 0); + leave_blocking_section(); + if (ret == SOCKET_ERROR) { + win32_maperr(WSAGetLastError()); + uerror("write", Nothing); + } + numwritten = ret; + } else { + BOOL ret; + HANDLE h = Handle_val(fd); + enter_blocking_section(); + ret = WriteFile(h, iobuf, numbytes, &numwritten, NULL); + leave_blocking_section(); + if (! ret) { + win32_maperr(GetLastError()); + uerror("write", Nothing); + } } written += numwritten; ofs += numwritten; |