InterviewSolution
| 1. |
How Do I Get My Server To Find Out The Clients Address / Host- Name? |
|
Answer» After accept()ing a connection, USE getpeername() to get the address of the client. The client's address is of COURSE, also returned on the accept(), but it is essential to initialise the address-length parameter before the accept call for this will work. int t; int len; struct sockaddr_in SIN; struct hostent *host; len = sizeof sin; if (getpeername(t, (struct sockaddr *) &sin, &len) < 0) perror("getpeername"); else { if ((host = gethostbyaddr((CHAR *) &sin.sin_addr,sizeof sin.sin_addr, AF_INET)) == NULL) perror("gethostbyaddr"); else printf("remote host is '%s'n", host->h_name); } After accept()ing a connection, use getpeername() to get the address of the client. The client's address is of course, also returned on the accept(), but it is essential to initialise the address-length parameter before the accept call for this will work. int t; int len; struct sockaddr_in sin; struct hostent *host; len = sizeof sin; if (getpeername(t, (struct sockaddr *) &sin, &len) < 0) perror("getpeername"); else { if ((host = gethostbyaddr((char *) &sin.sin_addr,sizeof sin.sin_addr, AF_INET)) == NULL) perror("gethostbyaddr"); else printf("remote host is '%s'n", host->h_name); } |
|