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