このエラーは、このスニペットで発生しました:
void TCPConnectThread::run()
{
m_socket = new QTcpSocket();
m_socket->setSocketDescriptor(m_fd);
m_socket->waitForReadyRead(10000);
QString data = m_socket->readAll();
m_socket->waitForDisconnected();
}
少し深い:
if (::WSAIoctl(socketDescriptor, FIONREAD, &dummy, sizeof(dummy), &nbytes,
sizeof(nbytes), &sizeWritten, 0,0) == SOCKET_ERROR) <-Exception here
{
WS_ERROR_DEBUG(WSAGetLastError());
return -1;
}
より深い:
if (::getsockopt(d->socketDescriptor, SOL_SOCKET,
SO_ERROR, (char *) &value, &valueSize) == 0) <-Here
invalid handle
run
メソッドの終了時に例外が発生しました。
m_socket を取得する方法は次のとおりです。
m_socket = new QTcpSocket();
m_socket->setSocketDescriptor(m_fd);//m_fd is the socket descriptor of another socket
//from another thread
m_fd
収集 元のスレッドは次のとおりです。
void TCPListenerThread::onNewConnection()
{
QTcpSocket *clientSocket = m_tcpServer->nextPendingConnection();
int sockfd = clientSocket->socketDescriptor();
m_connectThread = new TCPConnectThread(sockfd);
m_threadPool->start(m_connectThread);
}
例外:
Most possible exception at 0x76edf9ea in manager_host.exe:
0xC0000008: An invalid handle was specified
この無効なハンドルをどこでどのように見つけることができますか?