socket初学笔记整理

本文是关于socket编程的基础教程,重点介绍了如何创建socket,包括参数family(协议族)、type(套接字类型)和protocol(协议)的含义及常用取值,如AF_INET、SOCK_STREAM和TCP等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值