1. 程式人生 > >網絡編程-----bind()、listen()

網絡編程-----bind()、listen()

物理地址 之前 最大 傳輸層 list brush 返回值 font 不能

繼上篇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,而不能監聽原始套接口描述字;因為所在層不同;

網絡編程-----bind()、listen()