- if (connect(connFD, &addr.sa, sizeof(addr.in4)) == -1)
- {
- ServerInstance->SE->DelFd(listener);
- close(connFD);
- throw CoreException("Could not connet to ITC pipe");
- }
+ if (!BindAndListen(listenFD, 0, "127.0.0.1"))
+ throw CoreException("Could not create ITC pipe");
+ SocketEngine::NonBlocking(connFD);
+
+ struct sockaddr_in addr;
+ socklen_t sz = sizeof(addr);
+ getsockname(listenFD, reinterpret_cast<struct sockaddr*>(&addr), &sz);
+ connect(connFD, reinterpret_cast<struct sockaddr*>(&addr), sz);
+ SocketEngine::Blocking(listenFD);
+ int nfd = accept(listenFD, reinterpret_cast<struct sockaddr*>(&addr), &sz);
+ if (nfd < 0)
+ throw CoreException("Could not create ITC pipe");
+ new ThreadSignalSocket(this, nfd);
+ closesocket(listenFD);
+
+ SocketEngine::Blocking(connFD);