X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsocketengine.cpp;h=e24378e264262afc35beaba81cbdb4b30abd34b9;hb=04cfaea87edd1b4b742cb607ea69ece760c460aa;hp=2dbc82b275b4b4ee9a1b7c82565b1158a77e2aae;hpb=5eff6e24a95adf6fcda63304b17f829d0f8d40fe;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/socketengine.cpp b/src/socketengine.cpp index 2dbc82b27..e24378e26 100644 --- a/src/socketengine.cpp +++ b/src/socketengine.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * InspIRCd: (C) 2002-2010 InspIRCd Development Team * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see @@ -16,6 +16,7 @@ EventHandler::EventHandler() { fd = -1; + event_mask = 0; } void EventHandler::SetFd(int FD) @@ -152,9 +153,15 @@ int SocketEngine::NonBlocking(int fd) #endif } -int SocketEngine::GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen) +void SocketEngine::SetReuse(int fd) { - return getsockname(fd->GetFd(), name, namelen); + 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) @@ -191,9 +198,9 @@ int SocketEngine::Shutdown(EventHandler* fd, int how) return shutdown(fd->GetFd(), how); } -int SocketEngine::Bind(int fd, const sockaddr *my_addr, socklen_t addrlen) +int SocketEngine::Bind(int fd, const irc::sockets::sockaddrs& addr) { - return bind(fd, my_addr, addrlen); + return bind(fd, &addr.sa, addr.sa_size()); } int SocketEngine::Listen(int sockfd, int backlog)