diff options
author | Lennart Poettering <lennart@poettering.net> | 2006-01-10 17:51:06 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2006-01-10 17:51:06 +0000 |
commit | f7a99e90470526bb28cc0c225f96490110094aed (patch) | |
tree | cbcc4f2df6d66e180fd65ee50488545786d094f1 /polyp/iochannel.c | |
parent | 80ae72ce45dbc23ddc360749924110dcc752491e (diff) |
Merge Pierre's changes
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@445 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/iochannel.c')
-rw-r--r-- | polyp/iochannel.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/polyp/iochannel.c b/polyp/iochannel.c index 0e7e8db8..1a0dbf91 100644 --- a/polyp/iochannel.c +++ b/polyp/iochannel.c @@ -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); } |