socket

  网络通信需要使用到socket,它是一种“打开-读/写-关闭”的模式实现。

1.连接

int build_connect(int *fd, char *ip, int port)
{
         struct sockaddr_in server_addr;
         bzero(&server_addr, sizeof(struct sockaddr_in));  
         server_addr.sin_family = AF_INET;
         server_addr.sin_port = htos(port);
         if(!inet_aton(ip, &server_addr.sin_addr))
         {
                  return -1;
        }

        if((*fd = socket(PF_INET, SOCK_STREAM,0))<0)
        {
                 return -1;
        }

        if(connect(*fd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr_in))<0)
        {
                 close(*fd);
                 return -1;
        }

        return 0;
}            

sockaddr_in结构体的原型是:

struct sockaddr_in
{
       __SOCKADDR_COMMAN(sin_);
       in_port_t sin_port;
       struct in_addr sin_addr;

       unsigned char sin_zero[sizeof(struct sockaddr) -
                                       __SOCKADDR_COMMAN_SIZE -
                                       sizeof(in_port_t) - 
                                       sizeof(struct in_addr)];
}

2.设置阻塞方式

void set_nonblocking(int fd)
{
      int flag;
      if(flag = fcntl(fd, F_GETTL) < 0)
      {
              LOG(LOG_LEVEL_ERROR, "fcntl getfl fail");
      }

      flag |= O_NONBLOCK;
      if((flag = fcntl(fd, F_SETFL, flag))<0)
      {
               LOG(LOG_LEVEL_ERROR, "fcntl setfl fail");
      }
}

 

posted on 2017-05-31 17:38  残余的光  阅读(134)  评论(0编辑  收藏  举报

导航