void ExternalConnectThread::ThreadFunc() { m_udpSocket = m_address.m_socketFactory->CreateSocket(); UDPSocket* socket = dynamic_cast<UDPSocket*>(m_udpSocket); if(!socket || !socket->Bind(m_address.m_localIP, m_address.m_localPort)) { SignalError(); return; } socket->SetSendAddr(m_address.m_ip, m_address.m_port); std::string data = m_address.m_moduleName; int size = m_address.m_moduleName.size(); while(!IsStop()) { if(m_changeAddr.Wait(1000) == Semaphore::TIMEOUT) { if (!socket->Send((char*)&size, sizeof(size)) || !socket->Send((char*)data.c_str(), data.size() * sizeof(char))) { SignalError(); return; } } else { break; } } UDTSecureSocketFactory* udtSocketFactory = dynamic_cast<UDTSecureSocketFactory*>(m_address.m_socketFactory); if(!udtSocketFactory) { SignalError(); return; } udtSocketFactory->SetUdpSocket(socket->GetSocket()); m_csSocket.Enter(); m_udpSocket = 0; m_csSocket.Leave(); ConnectThread::ThreadFunc(); }