]> code.delx.au - pulseaudio/blobdiff - polyp/iochannel.c
Merge Pierre's changes
[pulseaudio] / polyp / iochannel.c
index 0e7e8db80200ecd9f00d19a444c179aef0a1fc2d..1a0dbf91816f08bd8022e9a9e294e82ded60ea00 100644 (file)
@@ -28,6 +28,8 @@
 #include <fcntl.h>
 #include <unistd.h>
 
+#include "winsock.h"
+
 #include "iochannel.h"
 #include "util.h"
 #include "socket-util.h"
@@ -189,7 +191,19 @@ ssize_t pa_iochannel_write(struct pa_iochannel*io, const void*data, size_t l) {
     ssize_t r;
     assert(io && data && l && io->ofd >= 0);
 
-    if ((r = write(io->ofd, data, l)) >= 0) {
+#ifdef OS_IS_WIN32
+    r = send(io->ofd, data, l, 0);
+    if (r < 0) {
+        if (WSAGetLastError() != WSAENOTSOCK) {
+            errno = WSAGetLastError();
+            return r;
+        }
+    }
+
+    if (r < 0)
+#endif
+        r = write(io->ofd, data, l);
+    if (r >= 0) {
         io->writable = 0;
         enable_mainloop_sources(io);
     }
@@ -201,7 +215,19 @@ ssize_t pa_iochannel_read(struct pa_iochannel*io, void*data, size_t l) {
     ssize_t r;
     assert(io && data && io->ifd >= 0);
     
-    if ((r = read(io->ifd, data, l)) >= 0) {
+#ifdef OS_IS_WIN32
+    r = recv(io->ifd, data, l, 0);
+    if (r < 0) {
+        if (WSAGetLastError() != WSAENOTSOCK) {
+            errno = WSAGetLastError();
+            return r;
+        }
+    }
+
+    if (r < 0)
+#endif
+        r = read(io->ifd, data, l);
+    if (r >= 0) {
         io->readable = 0;
         enable_mainloop_sources(io);
     }