xref: /plan9/sys/src/cmd/unix/u9fs/remotehost.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include <sys/types.h>
2*9a747e4fSDavid du Colombier #include <sys/socket.h>	/* various networking crud */
3*9a747e4fSDavid du Colombier #include <netinet/in.h>
4*9a747e4fSDavid du Colombier #include <netinet/tcp.h>
5*9a747e4fSDavid du Colombier #include <netdb.h>
6*9a747e4fSDavid du Colombier #include <plan9.h>
7*9a747e4fSDavid du Colombier 
8*9a747e4fSDavid du Colombier void
9*9a747e4fSDavid du Colombier getremotehostname(char *name, int nname)
10*9a747e4fSDavid du Colombier {
11*9a747e4fSDavid du Colombier 	struct sockaddr_in sock;
12*9a747e4fSDavid du Colombier 	struct hostent *hp;
13*9a747e4fSDavid du Colombier 	uint len;
14*9a747e4fSDavid du Colombier 	int on;
15*9a747e4fSDavid du Colombier 
16*9a747e4fSDavid du Colombier 	strecpy(name, name+nname, "unknown");
17*9a747e4fSDavid du Colombier 	len = sizeof sock;
18*9a747e4fSDavid du Colombier 	if(getpeername(0, (struct sockaddr*)&sock, (void*)&len) < 0)
19*9a747e4fSDavid du Colombier 		return;
20*9a747e4fSDavid du Colombier 
21*9a747e4fSDavid du Colombier 	hp = gethostbyaddr((char *)&sock.sin_addr, sizeof (struct in_addr),
22*9a747e4fSDavid du Colombier 		sock.sin_family);
23*9a747e4fSDavid du Colombier 	if(hp == 0)
24*9a747e4fSDavid du Colombier 		return;
25*9a747e4fSDavid du Colombier 
26*9a747e4fSDavid du Colombier 	strecpy(name, name+nname, hp->h_name);
27*9a747e4fSDavid du Colombier 	on = 1;
28*9a747e4fSDavid du Colombier 	setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on));
29*9a747e4fSDavid du Colombier 
30*9a747e4fSDavid du Colombier 	on = 1;
31*9a747e4fSDavid du Colombier 	setsockopt(0, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on));
32*9a747e4fSDavid du Colombier }
33