X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsocketengine.cpp;h=478400d1bc178cc464b972e3314cbf95fd6387d4;hb=0f87ad0d4b97874823c94a5168a06dcd444ad559;hp=3108ee7050a590294a9a13f26b07abc3b933f792;hpb=7aa5e059a8f66d91bd8b69c58c657ceb70b4baff;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/socketengine.cpp b/src/socketengine.cpp index 3108ee705..478400d1b 100644 --- a/src/socketengine.cpp +++ b/src/socketengine.cpp @@ -152,33 +152,39 @@ 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) { this->UpdateStats(len, 0); - return recvfrom(fd->GetFd(), buf, len, flags, from, fromlen); + return recvfrom(fd->GetFd(), (char*)buf, len, flags, from, fromlen); } int SocketEngine::Send(EventHandler* fd, const void *buf, size_t len, int flags) { this->UpdateStats(0, len); - return send(fd->GetFd(), buf, len, flags); + return send(fd->GetFd(), (char*)buf, len, flags); } int SocketEngine::Recv(EventHandler* fd, void *buf, size_t len, int flags) { this->UpdateStats(len, 0); - return recv(fd->GetFd(), buf, len, flags); + return recv(fd->GetFd(), (char*)buf, len, flags); } int SocketEngine::SendTo(EventHandler* fd, const void *buf, size_t len, int flags, const sockaddr *to, socklen_t tolen) { this->UpdateStats(0, len); - return sendto(fd->GetFd(), buf, len, flags, to, tolen); + return sendto(fd->GetFd(), (char*)buf, len, flags, to, tolen); } int SocketEngine::Connect(EventHandler* fd, const sockaddr *serv_addr, socklen_t addrlen)