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