编程接口指南

套接字和客户机

本节介绍客户机进程所执行的步骤。与在服务器中相同,第一步是查找远程登录的服务定义。

    bzero(&hints, sizeof (hints));

     hints.ai_flags = AI_ALL|AI_ADDRCONFIG;

     hints.ai_socktype = SOCK_STREAM;



     error = getaddrinfo(hostname, servicename, &hints, &res);

     if (error != 0) {

    (void) fprintf(stderr, "getaddrinfo: %s for host %s service %s\n",

                   gai_strerror(error), hostname, servicename);

    return (-1);

     }

getaddrinfo(3SOCKET) 返回 res 中的地址列表头。通过创建套接字,并尝试连接列表中返回的每个地址直到一个地址有效,即可找到所需的地址。

for (aip = res; aip != NULL; aip = aip->ai_next) {

  /*

   * Open socket.  The address type depends on what

   * getaddrinfo() gave us.

   */

  sock = socket(aip->ai_family, aip->ai_socktype,

      aip->ai_protocol);

  if (sock == -1) {

   perror("socket");

   freeaddrinfo(res);

   return (-1);

  }



  /* Connect to the host. */

  if (connect(sock, aip->ai_addr, aip->ai_addrlen) == -1) {

   perror("connect");

   (void) close(sock);

   sock = -1;

   continue;

  }

  break;

 }

套接字已经创建并已连接到所需的服务。connect(3SOCKET) 例程隐式绑定 sock,因为 sock 未绑定。