From 3a91332a70abfc777a352c46727f54426c982371 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Fri, 20 Dec 2013 01:34:09 -0800 Subject: A few more Win32 / VisualStudio fixes. --- src/Socket.cc | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/Socket.cc') diff --git a/src/Socket.cc b/src/Socket.cc index 2247d77..62fa8bc 100644 --- a/src/Socket.cc +++ b/src/Socket.cc @@ -3,7 +3,10 @@ #include #endif #include +#ifdef _MSC_VER +#else #include +#endif #include #include #include @@ -190,7 +193,7 @@ class AsyncOpResolv : public Balau::AsyncOperation { static Balau::DNSRequest * resolveName(const char * name, const char * service = NULL, struct addrinfo * hints = NULL) { Balau::DNSRequest * req = new Balau::DNSRequest(); - createAsyncOp(new AsyncOpResolv(name, service, hints, req)); + Balau::createAsyncOp(new AsyncOpResolv(name, service, hints, req)); return req; } @@ -242,7 +245,6 @@ void Balau::Socket::close() throw (GeneralException) { return; #ifdef _WIN32 closesocket(getFD()); - WSACleanup(); #else ::close(getFD()); #endif @@ -415,7 +417,11 @@ bool Balau::Socket::connect(const char * hostname, int port) { } #ifdef _WIN32 +#ifdef _MSC_VER + if (err != WSAEWOULDBLOCK) { +#else if (err != WSAWOULDBLOCK) { +#endif #else if (err != EINPROGRESS) { #endif @@ -483,7 +489,13 @@ Balau::IO Balau::Socket::accept() throw (GeneralException) { int s = ::accept(getFD(), (sockaddr *) &remoteAddr, &len); if (s < 0) { - if ((errno == EAGAIN) || (errno == EINTR) || (errno == EWOULDBLOCK)) { + int err = errno; +#ifdef _WIN32 + err = WSAGetLastError(); + if (err == WSAEWOULDBLOCK) + err = EAGAIN; +#endif + if ((err == EAGAIN) || (err == EINTR) || (err == EWOULDBLOCK)) { Task::operationYield(m_evtR, Task::INTERRUPTIBLE); } else { String msg = getErrorMessage(); @@ -508,11 +520,11 @@ ssize_t Balau::Socket::write(const void * buf, size_t count) throw (GeneralExcep } ssize_t Balau::Socket::recv(int sockfd, void *buf, size_t len, int flags) { - return ::recv(sockfd, buf, len, flags); + return ::recv(sockfd, (char *) buf, len, flags); } ssize_t Balau::Socket::send(int sockfd, const void *buf, size_t len, int flags) { - return ::send(sockfd, buf, len, flags); + return ::send(sockfd, (const char *) buf, len, flags); } Balau::ListenerBase::ListenerBase(int port, const char * local, void * opaque) : m_listener(new Socket()), m_stop(false), m_local(local), m_port(port), m_opaque(opaque) { -- cgit v1.2.3