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?
Linux, non-blocking UDP
- Klas-Kenny
- Inlägg: 11328
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Linux, non-blocking UDP
Du kan göra recvfrom() till non-blocking medelst fcntl().
Så kommer den returnera -1 om inget paket finns.
Så kommer den returnera -1 om inget paket finns.
Re: Linux, non-blocking UDP
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
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);
Re: Linux, non-blocking UDP
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.
Re: Linux, non-blocking UDP
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
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