Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla
OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla
OPPO Watch X2 Mini è uno smartwatch compatto capace di offrire un'esperienza completa di monitoraggio della salute e fitness con una cassa da 43 mm che può adattarsi a qualsiasi tipo di polso, dal più grande al - soprattutto - più piccolo. Con l'architettura dual-chip e un'autonomia che può coprire due giorni con tranquillità, rappresenta la soluzione ideale per chi cerca prestazioni premium in un formato ridotto.
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione
Dopo il recente lancio della serie Xiaomi 15T di Monaco, vi parliamo oggi della versione più performante della nuova famiglia, ovvero Xiaomi 15 T Pro. Vi raccontiamo la nostra prova nel dettaglio, spiegando perché a questo prezzo e in questa fascia, questo smartphone ha davvero senso tenerlo in seria considerazione.
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento
Acer ha ampliato la sua offerta professionale con il TravelMate P6 14 AI, un notebook ultraleggero e robusto pensato per chi lavora in mobilità. Certificato Copilot+ PC, combina design premium, autonomia elevata e piattaforma Intel Core Ultra Serie 2 con funzionalità AI, garantendo sicurezza, affidabilità e produttività per l'utenza business moderna.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-06-2007, 16:10   #1
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
[c] socket UDP, timeout....AIUTO!

Salve a tutti!
Sto avendo un problema con i socket UDP.
Per inviare/ricever un buffer utilizzo le funzioni sendto(...) recvfrom(...).
Ad esempio, per l'invio:

if (sendto(s, buffer_invio, dimensione_buffer_invio, 0,(struct sockaddr*)&peeraddr_in, &addrlen) != 1) {fprintf(stderr, "Connection aborted on error"); exit(1);}

e per la ricezione:

while (len = recvfrom(s,buffer_ricezione , dimensione_buffer_ricezione, 0,(struct sockaddr*)&peeraddr_in, &addrlen)) {if (len == -1) printf("Si è verificato un errore di ricezione\n");while (len < dimensione_buffer_ricezione) {len1 = recvfrom(s, &buffer_ricezione[len], dimensione_buffer_ricezione - len, 0,(struct sockaddr*)&peeraddr_in, &addrlen);if (len1 == -1) printf("Si è verificato un errore di ricezione\n");len += len1;}break;}

Il problema si presenta nel caso in cui si perde un pacchetto... In questo caso infatti la chiamata recvfrom() resta bloccata e il programma non procede.
Volevo sapere come è possibile impostare un timeout sulla recvfrom().
Qualcuno mi può aiutare?
Grazie 1000
P.S. non suggeritemi di utilizzare il TCP perchè per quello che devo fare è necessario usare l'UDP.

P.P.S.
Avevo pensato di poter interrompere la recvrom in questo modo:
......
double timeout=2; //timeout di 2 secondi
tstart(); //faccio partire un contatore
while ((len = recvfrom(s,buffer_ricezione , dimensione_buffer_ricezione, 0,(struct sockaddr*)&peeraddr_in, &addrlen))) {if (len == -1) printf("Si è verificato un errore di ricezione\n");while (len < dimensione_buffer_ricezione) {if(tval()>timeout) goto time_out_verificato; len1 = recvfrom(s, &buffer_ricezione[len], dimensione_buffer_ricezione - len, 0,(struct sockaddr*)&peeraddr_in, &addrlen);if (len1 == -1) printf("Si è verificato un errore di ricezione\n");len += len1;}break;}
time_out_verificato:
.....

ma non ha funzionato.... evidentemente non rimane il blocco sul ciclo while, ma proprio sulla recvrom().... spero di essere stato chiaro...

Ultima modifica di x-t : 24-06-2007 alle 16:16.
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 09:25   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da x-t Guarda i messaggi
Volevo sapere come è possibile [b]impostare un timeout sulla recvfrom().
Su sistemi linux, usa la poll seguita dalla recvfrom con flag MSG_DONTWAIT.
Su win32, una la select seguita dalla normale recvfrom.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 10:15   #3
alemuscolino
Bannato
 
Iscritto dal: Apr 2007
Messaggi: 54
AIUTOOOOOOOOOO!!!!

Sto impazzendo anch'io con i socket udp!!!!! Non riesco a impostare il timeout!!!! e su internet nn esistono esempi!!!
Come si usa la select () su windows??
VI PREGO AIUTO!
alemuscolino è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 10:27   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da alemuscolino Guarda i messaggi
e su internet nn esistono esempi!!!
Oh mamma!
http://www.google.it/search?hl=it&q=...nG=Cerca&meta=
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 10:41   #5
alemuscolino
Bannato
 
Iscritto dal: Apr 2007
Messaggi: 54
Oh potenete ilsensine...
Io nn sto trovando un pezzo di codice semi decente in cui è spiegato come utilizzare select() prima della recvfrom()...
Ti prego aiutami, attendo fonte d'illuminazione...(un pò di codice pulito)
alemuscolino è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 10:50   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Completamente non testato, ma ti rende l'idea...
Codice:
SOCKET sock = <il tuo socket>;
fd_set ifds;
long timeout_usec = 1000000; // il tuo timeout, in us
struct timeval timeout;
int ret;

assert(sock<FD_SETSIZE); // Definisci una tua FD_SETSIZE se capita questo

FD_ZERO(&ifds);
FD_SET(sock, &ifds);

timeout.tv_sec = timeout_usec / 1000000;
timeout.tv_usec = timeout_usec % 1000000;

ret = select(sock+1, &ifds, NULL, NULL, &timeout);
if (ret<=0 || !FD_ISSET(sock,  &ifds)) {
 /* timeout o errore */
} else {
 /* Dati in ingresso al socket; puoi qui usare la recvfrom senza bloccare */
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 11:40   #7
alemuscolino
Bannato
 
Iscritto dal: Apr 2007
Messaggi: 54
AIUTOOOOOOOOOOOOOOOOOOOOOOOOOOO!!!!!!!!!!!!!!

Grazie per la risposta.. ma ancora nn ci siamo.
1. Intanto ho dovuto togliere assert(sock<FD_SETSIZE); perchè altrimenti nn compilava (è grave?)
2.
if (ret<=0 || !FD_ISSET(sock, &ifds)) {
/* timeout o errore */
} else {
/* Dati in ingresso al socket; puoi qui usare la recvfrom senza bloccare */
}

nn è che forse è al contrario?? ovvero:

if (ret<=0 || !FD_ISSET(sock, &ifds)) {
/* Dati in ingresso al socket; puoi qui usare la recvfrom senza bloccare */
} else {
/* timeout o errore */
}

io credo di si.
3.si blocca in ogni caso... non funziona..

TI PREGO AIUTAMI!
alemuscolino è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 11:52   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da alemuscolino Guarda i messaggi
1. Intanto ho dovuto togliere assert(sock<FD_SETSIZE); perchè altrimenti nn compilava (è grave?)
Ti ci avevo messo tanto di commento...
metti qualcosa tipo
#define FD_SETSIZE 16384
all'inizio del file, prima di tutti gli include. Non sono sicuro che windows onora FD_SETSIZE, ma lo standard posix lo richiede.

Quote:
nn è che forse è al contrario??
No. Se i dati sono presenti, ret è >0 e FD_ISSET(sock, &ifds) è true.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 12:02   #9
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da alemuscolino Guarda i messaggi
1. Intanto ho dovuto togliere assert(sock<FD_SETSIZE); perchè altrimenti nn compilava (è grave?)
Ah no scusa, avevo letto male. E' un errore di compilazione, devi includere <assert.h>
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla OPPO Watch X2 Mini, lo smartwatch compatto a cui...
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione Xiaomi 15T Pro, è lui il nuovo best buy? ...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Le app entrano in ChatGPT. Da Spotify a ...
Ecco il meglio del Prime Day Amazon: tut...
Sony WH-1000XM5 e altre cuffie a un prez...
Prime Day Amazon: super sconti su robot ...
Scope elettriche al minimo storico su Am...
Festa delle Offerte Prime - TV a prezzi ...
Prime Day da urlo per gli smartphone: re...
Tutte le offerte sui Samsung Galaxy S25 ...
Prime Day Amazon: Apple Watch ai minimi ...
Tutte le offerte Apple per il Prime Day:...
Gli 8 portatili più scontati del ...
Prime Day Amazon: portatili gaming al mi...
Prime Day Amazon: -20% extra su migliaia...
Scarpe che vi faranno correre alla veloc...
MOVA Z60 Ultra Roller Complete: 200€ di ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v