socket() jeste jednou
Pavel Kankovsky
peak na kerberos.troja.mff.cuni.cz
Pátek Červen 12 13:39:18 CEST 1998
On Fri, 12 Jun 1998, Cejka Rudolf wrote:
> 2) Linux, ale nevim jak zjistit ktera distribuce (2.0.32), getsockopt.2.gz:
> Posledni upravy 23. leden 1997, oficialni datum ale 22. dubna 1996;
> u SO_???TIMEO je skutecne zminka o get_only, nastavitelnost si otestujte
> sam; pritom je na teto strance uvedeno "BSD Man Page". Tak fakt nevim.
Heh, v jadre o SO_???TIMEO neni VUBEC ZADNA zminka. Jinak TCP ma timeouty
natvrdo nastavene pri kompilaci (viz include/net/tcp.h).
Jinak samozrejme je reseni neco jako:
sock = socket(AF_INET, SOCK_STREAM, 0);
f = fcntl(sock, F_GETFL, 0);
fcntl(sock, F_SETFL, f | O_NDELAY);
r = connect(sock, ...);
if (r < 0 && errno == EINPROGRESS) {
FD_ZERO(&w);
FD_SET(fd, &w);
t.tv_sec = sekundy;
t.tv_usec = mikrosekundy;
if (select(fd + 1, NULL, &w, NULL, &t) <= 0) {
close(fd);
/* timeout */
}
}
(samozrejme by tam mely byt kontroly navratovych hodnot jednotlivych
syscallu)
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
Další informace o konferenci Linux