#include <fcntl.h>
#include <unistd.h>
+#include "winsock.h"
+
#include "iochannel.h"
#include "util.h"
#include "socket-util.h"
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);
}
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);
}