]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengine.cpp
More useful error reporting that give closer line numbers, so long as you can read...
[user/henk/code/inspircd.git] / src / socketengine.cpp
index ce7b1c9deeb59603db68df075ad5fc58683031c7..dd80b7f94019a605eb274a8d356400ed63dbdba3 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
  * See: http://www.inspircd.org/wiki/index.php/Credits
  *
  * This program is free but copyrighted software; see
@@ -61,7 +61,7 @@ void SocketEngine::WantWrite(EventHandler* eh)
 
 SocketEngine::SocketEngine(InspIRCd* Instance) : ServerInstance(Instance)
 {
-       memset(ref, 0, sizeof(ref));
+       TotalEvents = WriteEvents = ReadEvents = ErrorEvents = 0;
 }
 
 SocketEngine::~SocketEngine()
@@ -121,17 +121,6 @@ bool SocketEngine::BoundsCheckFd(EventHandler* eh)
        return true;
 }
 
-#ifdef WINDOWS
-
-int SocketEngine::Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen) { return -1; }
-int SocketEngine::Close(int fd) { return -1; }
-int SocketEngine::Close(EventHandler* fd) { return -1; }
-int SocketEngine::Blocking(int fd) { return -1; }
-int SocketEngine::NonBlocking(int fd) { return -1; }
-int SocketEngine::GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen) { return -1; }
-int SocketEngine::RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, sockaddr *from, socklen_t *fromlen) { return -1; }
-
-#else
 
 int SocketEngine::Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen)
 {
@@ -140,24 +129,42 @@ int SocketEngine::Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen)
 
 int SocketEngine::Close(EventHandler* fd)
 {
+#ifdef WINDOWS
+       return closesocket(fd->GetFd());
+#else
        return close(fd->GetFd());
+#endif
 }
 
 int SocketEngine::Close(int fd)
 {
+#ifdef WINDOWS
+       return closesocket(fd);
+#else
        return close(fd);
+#endif
 }
 
 int SocketEngine::Blocking(int fd)
 {
+#ifdef WINDOWS
+       unsigned long opt = 0;
+       return ioctlsocket(fd, FIONBIO, &opt);
+#else
        int flags = fcntl(fd, F_GETFL, 0);
        return fcntl(fd, F_SETFL, flags ^ O_NONBLOCK);
+#endif
 }
 
 int SocketEngine::NonBlocking(int fd)
 {
+#ifdef WINDOWS
+       unsigned long opt = 1;
+       return ioctlsocket(fd, FIONBIO, &opt);
+#else
        int flags = fcntl(fd, F_GETFL, 0);
        return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+#endif
 }
 
 int SocketEngine::GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen)
@@ -167,11 +174,9 @@ int SocketEngine::GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namel
 
 int SocketEngine::RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, sockaddr *from, socklen_t *fromlen)
 {
-       return recvfrom(fd->GetFd(), buf, len, flags, from, fromlen);
+       return recvfrom(fd->GetFd(), (char*)buf, len, flags, from, fromlen);
 }
 
-#endif
-
 int SocketEngine::Send(EventHandler* fd, const void *buf, size_t len, int flags)
 {
        return send(fd->GetFd(), (const char*)buf, len, flags);