X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsocketengine.cpp;h=80e9eaed97309ac1b4726e9364d35b7c6c99971f;hb=fd1d19d6345943ecdb5ce4ef947f9b3c5c8bca86;hp=72075dd499e7f1567140dcb6daeacfcff03abca0;hpb=43c9637aec3b98fe24ba94f75636c53871cf4d4d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/socketengine.cpp b/src/socketengine.cpp index 72075dd49..80e9eaed9 100644 --- a/src/socketengine.cpp +++ b/src/socketengine.cpp @@ -60,7 +60,7 @@ void SocketEngine::ChangeEventMask(EventHandler* eh, int change) new_m &= ~FD_WANT_READ_MASK; if (change & FD_WANT_WRITE_MASK) new_m &= ~FD_WANT_WRITE_MASK; - + // if adding a trial read/write, insert it into the set if (change & FD_TRIAL_NOTE_MASK && !(old_m & FD_TRIAL_NOTE_MASK)) trials.insert(eh->GetFd()); @@ -98,7 +98,7 @@ bool SocketEngine::HasFd(int fd) { if ((fd < 0) || (fd > GetMaxFds())) return false; - return ref[fd]; + return (ref[fd] != NULL); } EventHandler* SocketEngine::GetRef(int fd) @@ -125,7 +125,7 @@ int SocketEngine::Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen) int SocketEngine::Close(EventHandler* fd) { -#ifdef WINDOWS +#ifdef _WIN32 return closesocket(fd->GetFd()); #else return close(fd->GetFd()); @@ -134,7 +134,7 @@ int SocketEngine::Close(EventHandler* fd) int SocketEngine::Close(int fd) { -#ifdef WINDOWS +#ifdef _WIN32 return closesocket(fd); #else return close(fd); @@ -143,7 +143,7 @@ int SocketEngine::Close(int fd) int SocketEngine::Blocking(int fd) { -#ifdef WINDOWS +#ifdef _WIN32 unsigned long opt = 0; return ioctlsocket(fd, FIONBIO, &opt); #else @@ -154,7 +154,7 @@ int SocketEngine::Blocking(int fd) int SocketEngine::NonBlocking(int fd) { -#ifdef WINDOWS +#ifdef _WIN32 unsigned long opt = 1; return ioctlsocket(fd, FIONBIO, &opt); #else @@ -166,12 +166,7 @@ int SocketEngine::NonBlocking(int fd) void SocketEngine::SetReuse(int fd) { int on = 1; - struct linger linger = { 0, 0 }; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)); - /* This is BSD compatible, setting l_onoff to 0 is *NOT* http://web.irc.org/mla/ircd-dev/msg02259.html */ - linger.l_onoff = 1; - linger.l_linger = 1; - setsockopt(fd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger)); } int SocketEngine::RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, sockaddr *from, socklen_t *fromlen) @@ -208,7 +203,12 @@ int SocketEngine::SendTo(EventHandler* fd, const void *buf, size_t len, int flag int SocketEngine::Connect(EventHandler* fd, const sockaddr *serv_addr, socklen_t addrlen) { - return connect(fd->GetFd(), serv_addr, addrlen); + int ret = connect(fd->GetFd(), serv_addr, addrlen); +#ifdef _WIN32 + if ((ret == SOCKET_ERROR) && (WSAGetLastError() == WSAEWOULDBLOCK)) + errno = EINPROGRESS; +#endif + return ret; } int SocketEngine::Shutdown(EventHandler* fd, int how)