xref: /plan9/sys/src/cmd/unix/u9fs/remotehost.c (revision b94bb474148e9d24a82a427863d9c9eb4c20f4ae)
1*b94bb474SDavid du Colombier #include <plan9.h>
29a747e4fSDavid du Colombier #include <sys/socket.h>	/* various networking crud */
39a747e4fSDavid du Colombier #include <netinet/in.h>
49a747e4fSDavid du Colombier #include <netinet/tcp.h>
59a747e4fSDavid du Colombier #include <netdb.h>
69a747e4fSDavid du Colombier 
79a747e4fSDavid du Colombier void
getremotehostname(char * name,int nname)89a747e4fSDavid du Colombier getremotehostname(char *name, int nname)
99a747e4fSDavid du Colombier {
109a747e4fSDavid du Colombier 	struct sockaddr_in sock;
119a747e4fSDavid du Colombier 	struct hostent *hp;
129a747e4fSDavid du Colombier 	uint len;
139a747e4fSDavid du Colombier 	int on;
149a747e4fSDavid du Colombier 
159a747e4fSDavid du Colombier 	strecpy(name, name+nname, "unknown");
169a747e4fSDavid du Colombier 	len = sizeof sock;
179a747e4fSDavid du Colombier 	if(getpeername(0, (struct sockaddr*)&sock, (void*)&len) < 0)
189a747e4fSDavid du Colombier 		return;
199a747e4fSDavid du Colombier 
209a747e4fSDavid du Colombier 	hp = gethostbyaddr((char *)&sock.sin_addr, sizeof (struct in_addr),
219a747e4fSDavid du Colombier 		sock.sin_family);
229a747e4fSDavid du Colombier 	if(hp == 0)
239a747e4fSDavid du Colombier 		return;
249a747e4fSDavid du Colombier 
259a747e4fSDavid du Colombier 	strecpy(name, name+nname, hp->h_name);
269a747e4fSDavid du Colombier 	on = 1;
279a747e4fSDavid du Colombier 	setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on));
28*b94bb474SDavid du Colombier #ifdef TCP_NODELAY
299a747e4fSDavid du Colombier 	on = 1;
309a747e4fSDavid du Colombier 	setsockopt(0, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on));
31*b94bb474SDavid du Colombier #endif
329a747e4fSDavid du Colombier }
33