DWORD WINAPI ThreadEngine::Entry(void* parameter)
{
- Thread* pt = reinterpret_cast<Thread*>(parameter);
+ Thread* pt = static_cast<Thread*>(parameter);
pt->Run();
return 0;
}
{
SocketThread* parent;
public:
- ThreadSignalSocket(SocketThread* t, InspIRCd* SI, int newfd, char* ip)
+ ThreadSignalSocket(SocketThread* t, InspIRCd* SI, int newfd, const char* ip)
: BufferedSocket(SI, newfd, ip), parent(t)
{
- parent->results = this;
}
virtual bool OnDataReady()
class ThreadSignalListener : public ListenSocketBase
{
SocketThread* parent;
- irc::sockets::insp_sockaddr sock_us;
+ sockaddr_in sock_us;
public:
ThreadSignalListener(SocketThread* t, InspIRCd* Instance, int port, const std::string &addr) : ListenSocketBase(Instance, port, addr), parent(t)
{
}
}
- virtual void OnAcceptReady(const std::string &ipconnectedto, int nfd, const std::string &incomingip)
+ virtual void OnAcceptReady(int nfd)
{
- new ThreadSignalSocket(parent, ServerInstance, nfd, const_cast<char*>(ipconnectedto.c_str()));
+ new ThreadSignalSocket(parent, ServerInstance, nfd, "");
ServerInstance->SE->DelFd(this);
- // XXX unsafe casts suck
}
/* Using getsockname and ntohs, we can determine which port number we were allocated */
int GetPort()
{
-#ifdef IPV6
- return ntohs(sock_us.sin6_port);
-#else
return ntohs(sock_us.sin_port);
-#endif
}
};
SocketThread::SocketThread(InspIRCd* SI)
{
- ThreadSignalListener* listener = new ThreadSignalListener(this, ServerInstance, 0, "127.0.0.1");
+ ThreadSignalListener* listener = new ThreadSignalListener(this, SI, 0, "127.0.0.1");
if (listener->GetFd() == -1)
throw CoreException("Could not create ITC pipe");
int connFD = socket(AF_INET, SOCK_STREAM, 0);
throw CoreException("Could not create ITC pipe");
struct sockaddr_in addr;
- irc::sockets::insp_aton("127.0.0.1", &addr.sin_addr);
+ inet_aton("127.0.0.1", &addr.sin_addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(listener->GetPort());
- if (connect(connFD, static_cast<struct sockaddr*>(&addr), sizeof(addr)) == -1)
+ if (connect(connFD, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr)) == -1)
{
- ServerInstance->SE->DelFd(listener);
- close(connFD);
+ SI->SE->DelFd(listener);
+ closesocket(connFD);
throw CoreException("Could not connet to ITC pipe");
}
this->signal.connFD = connFD;
if (signal.connFD >= 0)
{
shutdown(signal.connFD, 2);
- close(signal.connFD);
+ closesocket(signal.connFD);
}
}