socket 系统调用学习

本文介绍了socket编程的基本概念,包括socket函数的使用方法、参数说明及如何建立连接等关键步骤。涵盖了不同类型的socket及其应用场景。

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

1. int socket(int domain, int type, int protocol);

    在使用该调用的程序中加入头文件:

    #include <sys/types.h>

    #include <sys/socket.h>

    socket 调用建立一个通信断电并返回一个socket描述符。

 

    参数描述:

             domain:用来指定发生通信的域,是用来选择要使用的协议族的参数,详细如下:

                     PF_LOCAL:用于本地通信的UNIX协议族(以前为PF_UNIX)。

                     PF_INET:IPv4互联网协议族。

                     PF_ISO:ISO协议族。

                     PF_CCITT:ITU-T协议,类似X.25。 

                     PF_NS:Xerox网络系统协议。

                     PF_INET6:IPv6互联网协议族。

                    其中,PF_xxxx在以前也定义为AF_xxxx,两者可以互换使用,如:PF_UNIX和AF_UNIX常量是                                         相同的值。

             type:参数type用来指明通信的类型,定义有以下几种:

                     SOCK_STREAM:提供顺序、可靠和基于字节流的双向链接。支持带外数据(out-of-band)传输,对于带外数                                               据,要求发送方在发送缓冲中的数据之前发送带外数据,接收方在处理缓冲之前处理带外数                                               据。

                     SOCK_DGRAM:支持数据报通信(无连接、不可靠、固定的消息最大长度)。

                     SOCK_SEQPACKET:提供顺序的、可靠的、基于固定最大长度数据报的有传输路径的双向链接。一个接受者                                                    在每次read系统调用时必须读入一个完整的报文(packet)。

                     SOCK_RAW:提供原始网络协议访问。

                     SOCK_RDM:提供一个可靠的数据报层,但不保证报文到达的顺序。

                    

            protocol:用来指定在socket上使用的特定协议。

 

2.int connect(int s, const struct sockaddr *name, int namelen);

connect系统调用的作用是在一个指定的socket上建立一个链接,使用时加入以下头文件:

  #include <sys/types.h>

     #include <sys/socket.h>

   参数分析:

       s:是一个打开的socket描述符。

        name:一个地址结构,指出了服务端的名字。该结构如下:

                  struct socketaddr

                  {

                       u_char sa_len;         /* 总长度 */

                       u_char sa_family;     /* 地址族 */

                       char     sa_data[14];/* 实际,地址值 */ 

                  };

         namelen:长度。

                  

 

3. int bind(int s, struct sockaddr *my_addr, int addrlen);

    该调用将一个名字绑定到一个socket上。

    需要的头文件:

    #include <sys/types.h>

    #include <sys/socket.h>

    bind调用为一个未命名的socket分配以个名字。换句话来说,bind调用时给套接字s赋予本地地址my_addr,这个             my_addr地址的长度为addrlen。对于不同的通信域的地址联编的规则是不同的,这里还是以internet域为主。如果想让     进程侦听任何一个本地接口的报文,那么将地址结构sockaddr_in中的成员sin_addr设置为INADDR_ANY.IP协议的           socket可以绑定到一个广播地址或组地址。这里要注意,要侦听的端口(sin_port)的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值