Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-07-2007, 15:49   #1
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
[c] socket UDP, timeout con select()....Aiutooo!

Salve a tutti!
Una settimana fa avevo aperto una discussione simile, ma non ho risolto il probema, e siccome la discussione è invecchiata troppo ho pensato di farne un'altra.
Il problema non è cambiato: si tratta di far in modo che una recvfrom(...) non resti bloccata se un pacchetto viene perduto (tendo conto che ho l'assoluta necessità di utilizzare l'UDP e che lavoro in windows). Mi era stato suggerito di usare la funzione select().
Vi posto 2 pezzi di codice relativ al client e al server:

LATO CLIENT:

Codice:
   while(contatore<iterazioni){
                               if (sendto(s, buffer_invio, dim_buff, 0, (struct sockaddr*)&peeraddr_in, &addrlen) != dim_buff) {fprintf(stderr, "Connection aborted on error"); exit(1);} //invia al server il buffer
                                  
                               fd_set readfds, masterfds;
                               struct timeval timeout;
                               timeout.tv_sec = 1;
                               timeout.tv_usec = 0;
                               memcpy(&readfds, &masterfds, sizeof(fd_set));
                               
                               
                               if (select(s+1, &readfds, NULL, NULL, &timeout) < 0){
                                  perror("on select");
                                  exit(1);
                               }
                               if (FD_ISSET(s, &readfds)){
                                  while (len = recvfrom(s,buffer_ricezione , dim_buff, 0, (struct sockaddr*)&peeraddr_in, &addrlen)) {if (len == -1) printf("Si è verificato un errore di ricezione\n");while (len < dim_buff) {len1 = recvfrom(s, &buffer_ricezione[len], dim_buff - len, 0, (struct sockaddr*)&peeraddr_in, &addrlen);if (len1 == -1) printf("Si è verificato un errore di ricezione\n");len += len1;}break;} //ricezione dal server
                                  printf("1\t");
                                  
                                }
                               else
                               {
                                  printf("0\t");
                                  contapersi++;
                                // the socket timedout
                               }
                               contatore++;                                    
                               
      }
LATO SERVER:
Codice:
    while(contatore<iterazioni){
                                    fd_set readfds, masterfds;
                                    struct timeval timeout;
                                    timeout.tv_sec = 1;
                                    timeout.tv_usec = 0;
                                    FD_ZERO(&masterfds);
                                    FD_SET(s, &masterfds);
                                    memcpy(&readfds, &masterfds, sizeof(fd_set));
                                
                                if (select(s+1, &readfds, NULL, NULL, &timeout) < 0){
                                    perror("on select");
                                    exit(1);
                                }
                                 if (FD_ISSET(s, &readfds)) {             
                                 while ((len = recvfrom(s,buffer_invio_ricezione , dim_buff, 0,(struct sockaddr*)&peeraddr_in, &addrlen))) {if (len == -1) printf("Si è verificato un errore di ricezione per %d\n", contatore+1); while (len < dim_buff) {len1 = recvfrom(s, &buffer_invio_ricezione[len], dim_buff - len, 0,(struct sockaddr*)&peeraddr_in, &addrlen);if (len1 == -1) printf("Si è verificato un errore di ricezione per %d\n", contatore+1);len += len1;}break;} //ricezione dal client         
                                 printf("ok su %d\n", contatore + 1);
                                }
                                else
                                {
                                 // the socket timedout
                                 printf("timeout su %d\n", contatore + 1);
                                }
                                if (sendto(s, buffer_invio_ricezione, dim_buff, 0,(struct sockaddr*)&peeraddr_in, &addrlen) != dim_buff) {fprintf(stderr, "Connection aborted on error"); exit(1);} //invia al client il buffer ricevuto
                                contatore++;
      }
Fino a quando contatore non raggiunge iterazioni, l'applicazione dovrebbe restare dentro il ciclo, e stampare, sia dal lato client che dal lato server, il punto in cui qualcosa non ha funzionato.
Praticamente, riesce solo a ricevere il primo pacchetto, dopo di che esce a causa di un errore da parte della select (infatti torna -1).
Io non sto capendo proprio dove possa essere il problema.
Vi prego, qualcuno di buona volontà mi può aiutare? grazie infinite!

Ultima modifica di x-t : 02-07-2007 alle 15:51.
x-t è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
Debutta Freelander, il nuovo marchio di ...
Le migliori offerte Amazon di oggi: Appl...
Ecco l'auto della discordia, Voyah Passi...
Virgin Galactic posticipa la ripresa dei...
Apple AirPods Pro 3 a 199€: ANC evoluto,...
Insta360 Flow Pro a 65€: il gimbal per i...
IONIQ 3, parte da Izmit la produzione de...
Per il cofondatore di Arm l'IA non &egra...
Nove CEO dell'AI, nessuno si salva: il m...
OpenAI ha sciolto il team che valutava i...
Dreame Aqua10 Ultra, super calo di prezz...
Microsoft ritira Mico: dal 18 agosto Cop...
Oracle si prepara a nuovi licenziamenti ...
È morta Hayden Panettiere, la sta...
Stripe vicina a comprare OpenRouter per ...
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: 14:57.


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