struct servent by qingqing19771029


									            Advanced UNIX programming
                              Fall 2002
                    Instructor: Ashok Srinivasan
                                      Lecture 25

Acknowledgements: The syllabus and power point presentations are modified versions of those by
T. Baker and X. Yuan
• Reading assignment
  – Chapter 9
    • Sections 9.1 to 9.9
  – Midterm Monday
  – Clarifications on project and HW3
  – Midterm review
              Week 9 Topics
• Socket options
  – getsockopt, setsockopt
  – fcntl
  – ioctl
• Introduction to UDP
  – TCP vs UDP
  – UDP interface
    Week 9 Topics ... continued
• Name and address conversions
  – Domain name system
  – gethostbyname
  – gethostbyaddr
  – uname
  – gethostname
  – getservbyname
  – getservbyport
 Name and address conversions
• Names are easier to use
  – Names add a layer of indirection
    • Numeric addresses can be changed without
      modifying the name
    • A program can be more portable by using a
  – The mapping between hostnames and IP
    addresses is done by the domain name
    system (DNS)
          Domain name system
• Mapping between names and
     • <-->
• References
  – See
    dns.html for information on
     • DNS organization
     • Why they should be the sole authority!
  Domain name system ... continued
• Hierarchical naming scheme
  – Name space partitioned into subdomains
  – Top level of domains
     • .com, .edu, .gov, .org, .us, .ca, .in, etc
  – Each domain can have subdomains
• Distributed delegation of naming
  – Each domain has the authority to allow
    names within that domain
  – Naming follows organization boundary not
    physical network boundary
               Resource records
• Each server keeps resource records (RRs)
  – Information
     • IP address, record type, name, etc

• Some relevant RR types
  – A : Maps a hostname to an IPv4 address
  – AAAA: Maps a hostname to an IPv6 address
  – PTR: Pointer records, map IP addresses to
  – MX: Mail exchanger for a host
  – CNAME: Canonical name
     • Used to assign CNAME records for common services
                  Name servers
• Name server
  – When a name server receives a DNS
    request, if the server is the authority for the
    name, it finds the resource record and
  – Otherwise it recursively asks the next level
     • Example: gethostbyname(“”) ---> --> edu --> --> -->>edu

  – Optimizations
     • Replication and caching
#include <netdb.h>
struct hostent *gethostbyname(const char
struct hostent {
     char *h_name;
     char **h_aliases;
     int h_addrtype;
     int h_length;
     char **h_addr_list;
•    This function queries A or AAAA records
    #include <netdb.h>
    struct hostent *gethostbyaddr(const char
        *addr, size_t len, int family)
    – addr is a pointer to an in_addr structure
    – len = 4 for IPv4 and 16 for IPv6
    – This function queries PTR records
•   See example1.c and example2.c
    – These two system calls incur significant
      communication overhead
      •   You can observe this in example1a.c
           uname and gethostbyname
•       Information on name, os, and hardware
•       #include <sys/utsname.h>
    int uname (struct utsname *name)
    struct utsname
        char sysname[_UTS_NAMESIZE];
        char nodename[_UTS_NODESIZE];
        char release[_UTS_NAMESIZE];
        char version[_UTS_NAMESIZE];
        char machine[_UTS_NAMESIZE];
    –     See example2.c
    –     gethostbyname can be used to get host name
    getservbyname and getservbyport
•       Get service information
    –     Not querying the DNS, but a system specific file, for
          example /etc/services
          #include <netdb.h>
          struct servent *getservbyname(const char *servname, const char
          struct servent *getservbyport(int port, const char*protoname);
          struct servent {
              char *s_name;
              char** s_aliases;
              int s_port;
              char *s_proto;
          •     See example3.c and example4.c

To top