Thanatos13
Grünschnabel
Hallo,
gibt es für sockets eine Art Signal, Event oder Interrupt, das mir anzeigt, dass neue Daten am socket anliegen um mit recv abgeholt werden zu können?
Da es mir um zeitkritische Anwendungen geht (~200us) wäre eine zusätzliche Abfrage über poll() nicht die beste Lösung.
Recv() ist zur Zeit noch blocking, mit einem Timeout von 100us (übers socket definiert).
Das ganze ist unter Linux (Kubuntu 8.10) programmiert.
Hier ein wenig Code zur Verdeutlichung:
gibt es für sockets eine Art Signal, Event oder Interrupt, das mir anzeigt, dass neue Daten am socket anliegen um mit recv abgeholt werden zu können?
Da es mir um zeitkritische Anwendungen geht (~200us) wäre eine zusätzliche Abfrage über poll() nicht die beste Lösung.
Recv() ist zur Zeit noch blocking, mit einem Timeout von 100us (übers socket definiert).
Das ganze ist unter Linux (Kubuntu 8.10) programmiert.
Hier ein wenig Code zur Verdeutlichung:
Code:
[...]
while (((sock = socket(PF_PACKET, SOCK_RAW, htons(0x88A4))) < 0) && tries < MAX_TRIES_SOCKET) {
sleep(1);
tries++;
}
int64_t timeout = TIMEOUT_NSEC;
if(ioctl(sock,RTNET_RTIOC_TIMEOUT,&timeout) < 0) {
perror("Cannot set timout");
printf("Continue without timeout\n");
}
[...]
int len_recv = recv(sock,buffer_receive,sizeof(buffer_receive),0);
if(len_recv < 0) {
perror("low_level_input: Cannot receive msg: ");
return false;
}
[...]