1. 程式人生 > >網路程式設計-----bind()、listen()

網路程式設計-----bind()、listen()

繼上篇socket之後,又出一坑。。。篇簡單的理解

  bind()

 函式原型:int bind( int sockfd , const struct sockaddr * my_addr, socklen_t addrlen);

   引數說明:

  sockfd:套介面描述字,這個不多說了,就是函式socket()的返回值;

  my_addr:指標,指向一個結構體,該結構體包含GameServer的資訊;在GameServer中,包含的是協議族、server地址(一般都是本地的實體地址)、埠號;在client中包含協議族、server地址、連線的埠號;

struct sockaddr_in {
    sa_family_t            sin_family;   //協議族
    uint16_t                 sin_port;     //連線埠
    struct in_addr        sin_addr;     //server地址
};
struct in_addr{
    In_addr_t      s_addr;
};

  addrlen:結構體長度;

  返回值:0,繫結成功;-1,繫結失敗;

 

  listen()

       函式原型:int listen( int sockfd, int backlog);

  函式說明:

  sockfd:套介面描述字,也不多說;

  backlog:允許客戶機連線的最大長度;

  返回值:-1,監聽失敗;0,監聽成功;

  特別說明一下這個函式,小博之前踩過坑;首先listen之前必須要先bind套介面描述字,其次監聽的範圍,僅僅只能監聽傳輸層上的套介面描述字,說白了就是隻能監聽TCP、UDP,而不能監聽原始套介面描述字;因為所在層不同;