TAYBENGH%NUSDISCS.BITNET@cunyvm.cuny.edu (03/24/90)
Dear Marvin, In Unix wizard u write: >I have a client and server program. I would like the server program to log >where the client is calling from (hostname). So if I were to call the server >, the server would print: from: oliver.vcu.edu >I'm pretty sure this isn't a wizard-type question, but we don't subscribe >to usenet news here, there is no other applicable listserv group for me to >ask/join, and there aren't any wizs around here. If u are using BSD socket interface, the u can use recvfrom() to get the caller's identity. Below are the portion of code doing it. I hope this helps... -Beng Hang Tay (email address: taybengh@nusdiscs.bitnet) Department of Information Systems and Computer Science National University of Singapore -------------------------cut here------------------------------------ int size, socklen, socket_id; struct sockaddr_in from_sock; /* caller's sockaddr_in */ struct hostent *from; /* recvfrom() will return caller's identity in from_sock */ socklen = sizeof(from_sock); size = recvfrom(socket_id, buf, buflen, option, (struct sockaddr *)&from_sock, &socklen); if (size < 0) errmsg("bs_recvfr(): sendto()") /* display caller identity */ printf("\nfrom sock: \n"); printf("family = %d \n", from_sock.sin_family); printf("sin_addr.s_addr = %x \n", ntohl(from_sock.sin_addr.s_addr)); printf("net number = %x \n", inet_netof(from_sock.sin_addr)); printf("local address part = %x \n", inet_lnaof(from_sock.sin_addr)); printf("port # = %u\n", ntohs(from_sock.sin_port)); /* get the caller's host name */ from = gethostbyaddr((char*)&from_sock.sin_addr, sizeof(from_sock.sin_addr), type); /* display caller host name */ printf("\nfrom host: \n"); printf("name %s \n", from->h_name); printf("address type %d \n", from->h_addrtype); printf("address length %d \n", from->h_length); printf("Internet address %s, %x \n", from->h_addr, ntohl(from->h_addr)); ---------------------------------cut here---------------------------