Linux, non-blocking UDP

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Linux, non-blocking UDP

Inlägg av Marta »

Letar men hittar inget alternativ till recvfrom() som är non-blocking. Inte heller något sätt att testa om en packet väntar så programmet säkert inte "fastnar" på recvfrom(). Vill om möjligt undvika threads.

Förslag från Er mera erfarna?
Användarvisningsbild
Klas-Kenny
Inlägg: 11325
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Linux, non-blocking UDP

Inlägg av Klas-Kenny »

Du kan göra recvfrom() till non-blocking medelst fcntl().

Så kommer den returnera -1 om inget paket finns.
Willow
Inlägg: 131
Blev medlem: 23 november 2006, 21:30:44
Ort: Mölndal

Re: Linux, non-blocking UDP

Inlägg av Willow »

Har du testat att ändra timeout till något jättekort?

Sist i den här tråden finns ett exempel:

https://stackoverflow.com/questions/159 ... cking?rq=1

Kod: Markera allt

#include <sys/types.h> 
#include <sys/socket.h>
...
struct timeval read_timeout;
read_timeout.tv_sec = 0;
read_timeout.tv_usec = 10;
setsockopt(socketfd, SOL_SOCKET, SO_RCVTIMEO, &read_timeout, sizeof read_timeout);
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 908
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: Linux, non-blocking UDP

Inlägg av mankan »

Non-blocking alla dagar i veckan, gärna i kombination med select/poll m.fl. Men om man ska ta emot mycket trafik så finns en hel del att tjäna på recvmsg och använda timerbaserad polling istf select/poll om man vill hålla nere systemlasten. Vill man spara ytterligare komputroner så fipplar man med plugins/moduler i kärnan så man slipper UDP-checksummekollen ifall den inte är HW-accelererad.
mounte
Inlägg: 204
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Linux, non-blocking UDP

Inlägg av mounte »

Kan du utveckla fråga lite till gällande din tillämpning?
Vad vill du åstadkomma/vad ska programmet göra till syvende och sist? (Hur mycket data ska skyfflas och hur ofta? Krav på latency etc?...)

Linux läste jag men för vilken typ av hårdvara kommer koden köras och vad för prestanda finns till hands?

Alltid spännande att få veta mer :D
Skriv svar