Toon posts:

[C++] blocking socket

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik loop tegen een probleempje aan en ik weet niet precies hoe ik het op moet lossen; de onderstaande procedure (min of meer uit mpg123 geript) leest informatie uit een open socket. Echter, als er bijv een verkeerd IP adres gegeven is, wacht hij dus tot in de eeuwigheid zonder dat hij met CTRL-C te onderbreken is (de applicatie moet gekilled worden).

Weet iemand hier een oplossing voor?

void readstring(char *string,int maxlen,FILE *f)
{
int pos=0;

//infinite loop
while (1) {
//read a byte from socket
if (read(fileno(f),string+pos,1) == 1) {
pos++;
//end of line?
if (string[pos-1] == '\n') {
string[pos] = 0;
break;
}
}
//nothing to read?
else if (errno != EINTR) {
printf("Error reading from socket or incorrect path.\n");
exit (1);
}
}
}

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ken C++ niet, maar non-blocking kan je vast opgeven via de constructor van de socket

Verwijderd

man 2 fcntl

fcntl(fileno(f), F_SETFL, O_NONBLOCK);

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:54
Op maandag 17 juni 2002 11:30 schreef zeronegative het volgende:
Echter, als er bijv een verkeerd IP adres gegeven is, wacht hij dus tot in de eeuwigheid zonder dat hij met CTRL-C te onderbreken is (de applicatie moet gekilled worden).
Ik neem aan de dat 'eeuwigheid' een bepaalde time-out is (vaak tot een minuut of twee).
Weet iemand hier een oplossing voor?
Jawel; de I/O mode op non-blocking I/O zetten en vervolgens met behulp van select en een eigengespecificeerde timeout proberen te verbinden. Op zich is het niet zo verkeerd om de timeout vanuit het operating system aan te houden, trouwens.

(Wat heeft dit trouwens met C++ te maken?)