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