|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
|
[C++] Win Mobile 5 e jrtplib
Allora... Lo stesso codice su win32 gira bene su winCe si blocca e non capisco il perchè...
Mi dà questo errore Quote:
Ed ecco dove si presenta l'errore, all'interno della jrtplib ma non capisco cosa c'è di sbagliato: Codice:
int RTPUDPv4Transmitter::Poll()
{
if (!init)
return ERR_RTP_UDPV4TRANS_NOTINIT;
int status;
MAINMUTEX_LOCK
if (!created)
{
MAINMUTEX_UNLOCK
return ERR_RTP_UDPV4TRANS_NOTCREATED;
}
status = PollSocket(true); // poll RTP socket
if (status >= 0)
status = PollSocket(false); // poll RTCP socket
MAINMUTEX_UNLOCK
return status;
}
status = PollSocket(true); Premo nuovamente F11 e entro nella funzione... Codice:
int RTPUDPv4Transmitter::PollSocket(bool rtp)
{
RTPSOCKLENTYPE fromlen;
int recvlen;
char packetbuffer[RTPUDPV4TRANS_MAXPACKSIZE];
#if (defined(WIN32) || defined(_WIN32_WCE))
SOCKET sock;
unsigned long len;
#else
size_t len;
int sock;
#endif // WIN32
struct sockaddr_in srcaddr;
if (rtp)
sock = rtpsock;
else
sock = rtcpsock;
len = 0;
RTPIOCTL(sock,FIONREAD,&len);
if (len <= 0)
return 0;
while (len > 0)
{
RTPTime curtime = RTPTime::CurrentTime();
fromlen = sizeof(struct sockaddr_in);
recvlen = recvfrom(sock,packetbuffer,RTPUDPV4TRANS_MAXPACKSIZE,0,(struct sockaddr *)&srcaddr,&fromlen);
if (recvlen > 0)
{
bool acceptdata;
// got data, process it
if (receivemode == RTPTransmitter::AcceptAll)
acceptdata = true;
else
acceptdata = ShouldAcceptData(ntohl(srcaddr.sin_addr.s_addr),ntohs(srcaddr.sin_port));
if (acceptdata)
{
RTPRawPacket *pack;
RTPIPv4Address *addr;
uint8_t *datacopy;
addr = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTPADDRESS) RTPIPv4Address(ntohl(srcaddr.sin_addr.s_addr),ntohs(srcaddr.sin_port));
if (addr == 0)
return ERR_RTP_OUTOFMEM;
datacopy = RTPNew(GetMemoryManager(),(rtp)?RTPMEM_TYPE_BUFFER_RECEIVEDRTPPACKET:RTPMEM_TYPE_BUFFER_RECEIVEDRTCPPACKET) uint8_t[recvlen];
if (datacopy == 0)
{
RTPDelete(addr,GetMemoryManager());
return ERR_RTP_OUTOFMEM;
}
memcpy(datacopy,packetbuffer,recvlen);
pack = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTPRAWPACKET) RTPRawPacket(datacopy,recvlen,addr,curtime,rtp,GetMemoryManager());
if (pack == 0)
{
RTPDelete(addr,GetMemoryManager());
RTPDeleteByteArray(datacopy,GetMemoryManager());
return ERR_RTP_OUTOFMEM;
}
rawpacketlist.push_back(pack);
}
}
len = 0;
RTPIOCTL(sock,FIONREAD,&len);
}
return 0;
}
Premo nuovamente F11 e il programma termina stampando l'errore che ho scritto in precedenza. Lo stesso codice su win32 funziona bene. Non sò dove sbattere la testa cosa può essere??? Provato anche su win mobile 6 e mi dà lo stesso errore... Help grazie
__________________
Dont drink and drive but smoke and fly Peugeot 206 enfant terrible!!! |
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
|
Ho trovato la soluzione:
Nelle impostazioni di visual studio sotto Linker---->Sistema Ci sono due voci: dimensione stack riservata 65536 dimensione stack commit 4096 Cosa sono questi valori e soprattutto da cosa dipendono? Aggiungendo uno 0 a entrambi il programma funziona... Però Non mi è chiaro...
__________________
Dont drink and drive but smoke and fly Peugeot 206 enfant terrible!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:30.


















