void UDPSocket::receive(PMSG pMsg) { int err = 0; DWORD flags = 0; DWORD numReceived = 0; WSABUF winsockBuff; winsockBuff.len = 1024 * 8 + 44; winsockBuff.buf = (char*) calloc(winsockBuff.len, sizeof(char)); if (WSARecvFrom(pMsg->wParam, &(winsockBuff), 1, &numReceived, &flags, NULL, NULL, NULL, NULL) == SOCKET_ERROR) { if ((err = WSAGetLastError()) != WSA_IO_PENDING) { qDebug("UDPSocket::receive(): WSARecv() failed with error %d", err); return; } } if (numReceived == 0) { return; } QByteArray writeData(winsockBuff.buf, numReceived); // CRITICAL SECTION: Lock mutex here. QMutexLocker locker(receiveLock_); inputBuffer_->write(writeData); locker.unlock(); // END CRITICAL SECTION: Unlock mutex. delete[] winsockBuff.buf; emit readyRead(); emit signalDataReceived(this); }
void ReconServer::slotDataReceived(QString message, int length) { emit signalDataReceived(message, length); }