socket初学笔记整理

来源:互联网 发布:zookeeper 集群 linux 编辑:程序博客网 时间:2024/05/18 03:51

1: 创建socket ---socket

原型: int socket(int family, int type, int protocol)

返回值: 创建成功返回socket描述符,失败则返回-1

第一个参数(family)表示协议族,常用值有AF_INET,AF_INET6, AF_LOCAL(Unix域协议), AF_ROUTE(路由套接字), AF_KEY(密钥套接字)

第二个参数(type)表示所需创建的socket的类型,主要有SOCK_STREAM(字节流套接字),SOCK_DRAM(数据包套接字),SOCK_SEQPACKET(有序分组套接字),SOCK_RAW(原始套接字)

第三个参数(protocal)表示使用的协议,常用TCP,UDP,SCTP

int Socket(int family, int type, int protocal){    int sockfd;    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)           return -1;    return sockfd;}
2:    绑定bind

原型: int bind(int sockfd,  const struct sockaddr *socketaddr, socklen_t addrlen)

        返回值: 成功返回0, 失败返回-1

        这个函数要注意的地方是第二个参数,由于一般在自己函数里面定义的地址结构使用的是sockaddr_in类型,在使用bind时主要进行强制转换,同样在accept函数中也是如此。

struct sockadd_in {    uint8_t            sin_len;    sa_family_t     sin_family;    in_port_t         sin_port;    struct in_addr  sin_addr;    char                  sin_zero[8];       }
struct sockadd {    uint8_t  sa_len;    sa_family_t   sa_family;    char     sa_date[14];}
3;   接受函数accept

原型:

int  accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen)
        返回值: 成功则返回非负的描述符,失败返回-1

       注意点: 第一个参数是监听的socket的描述符,同时注意返回的地址,这里使用的是值-结果的传递方式。

4: 监听listen

        原型:int listen(int sockfd, int backlog)

        返回值: 成功返回0,失败返回-1

       注意点:第二个参数,表示改监听能同时接受到的客户端连接。

5:  连接connect函数

       原型: int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen)

       返回值: 成功返回0, 失败返回-1