UDP a recvFrom

0

Witam serdeczie i z gory dziekuje za odpowiedz...
Pisze programik ktory bedzie klientem UDP (i jednoczecnie serverkiem UDP ale nie jet to wazne teraz)...

Czy jest jakas mozliwosc sprawdzenia czy na port UDP cos przyszlo (i jesli tak to odebrac) a jesli nie to isc dalej..
w moim programie

recvFrom(text, text_length, AdresZrodla, PortZrodla)

tylko ze buffor musi byc tak duzy jak pakiet to oczywiste (specyfikacja UDP) ale jesli server nic nie odpowiada to tutaj mi sie zawiesza programik.. bo ciagle slucha i slucha...

Dlatego jest mi mozliwosc sprawdzenia czy cos na port przyszlo z jakims limitem czasu

W linuxie jest takie cos (nie umie tego uzywac):

    // ustawiam odpowiedni czas
    struct timeval czas;
    czas.tv_sec  = 0;
    czas.tv_usec = 500;
    
    // Ustawiam FileDestryptor jako socket ;-)
    fd_set ZrodloDanych;
    FD_ZERO(&ZrodloDanych);
    FD_SET(sockDesc, &ZrodloDanych);
    // sockDesc to deskryptor poru

   switch (select(1, &ZrodloDanych, NULL, NULL, &czas)) {
       case 0:     text=""; break;   // przeterminowanie
       case -1:    throw ErrorClass(BLAD_Select); break; //blad funkcji select
       default:        char buf[4097];
                          text = "";
                          bzero(buf,4097);
                          recvFrom(buf, 4096, AdresNadawcy, PortNadawcy);
                          if ((AdresNadawcy == Adres) && (PortNadawcy == Port))
                             text.append(buf,4096);
                          break;
    }

ale nie wiem co wstawic pod '1' w selectie, bo wg specyfikacji jest to numer najwyzszego destryptora +1 i nie wiem czy dobrze ten FileDestryptor ustawilem..

select.h jest biblioteka linuxowa

0

Dodalem flage O_NONBLOCK
i zadzialalo a dokladniej:

fcntl(sockDesc, F_SETFL, O_NONBLOCK);

a czas na 1 sekundke przy select() i dziala !
[green] [browar] [soczek] :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1