Sida 1 av 1
Linux, non-blocking UDP
Postat: 18 november 2019, 12:15:24
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?
Re: Linux, non-blocking UDP
Postat: 18 november 2019, 13:08:27
av Klas-Kenny
Du kan göra recvfrom() till non-blocking medelst fcntl().
Så kommer den returnera -1 om inget paket finns.
Re: Linux, non-blocking UDP
Postat: 19 november 2019, 19:50:59
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);
Re: Linux, non-blocking UDP
Postat: 20 november 2019, 00:25:19
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.
Re: Linux, non-blocking UDP
Postat: 20 november 2019, 10:25:23
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
