易学笔记-第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字

第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.1 头文件

  • 头文件

  1. #include<sys/socket.h>
  2. /* Create a new socket of type TYPE in domain DOMAIN, using

       protocol PROTOCOL.  If PROTOCOL is zero, one is chosen automatically.

       Returns a file descriptor for the new socket, or -1 for errors.  */

    extern int socket (int __domain, int __type, int __protocol) __THROW;


第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.2 参数一:__domain 套接字中使用的协议族

  • 参数一:套接字中使用的协议族

  1. 头文件: #include<bits/socket.h>
  2. 几个重要协议:
    1. IPV4互联网协议族(常用):#define    PF_INET        2    /* IP protocol family.  */
    2. IPV6互联网协议族: #define    PF_INET6    10    /* IP version 6.  */
    3. 本地通信的UNIX协议族:#define    PF_LOCAL    1    /* Local to host (pipes and file-domain).  */
    4. 底层套接字协议族:#define    PF_PACKET    17    /* Packet family.  */
    5. IPX Novell协议族:#define    PF_IPX        4    /* Novell Internet Protocol.  */

第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.3 参数二_:_type套接字类型

  • 参数二:套接字类型

  1. 头文件:#include<bits/socket_type>
    1. Types of sockets.  */

      enum __socket_type

      {

        SOCK_STREAM = 1,                  /* Sequenced, reliable, connection-based

                                              byte streams.  */

      #define SOCK_STREAM SOCK_STREAM

        SOCK_DGRAM = 2,                   /* Connectionless, unreliable datagrams

                                              of fixed maximum length.  */

      #define SOCK_DGRAM SOCK_DGRAM

        SOCK_RAW = 3,                         /* Raw protocol interface.  */

      #define SOCK_RAW SOCK_RAW

        SOCK_RDM = 4,                        /* Reliably-delivered messages.  */

      #define SOCK_RDM SOCK_RDM

        SOCK_SEQPACKET = 5,            /* Sequenced, reliable, connection-based,

                                              datagrams of fixed maximum length.  */

      #define SOCK_SEQPACKET SOCK_SEQPACKET

        SOCK_DCCP = 6,               /* Datagram Congestion Control Protocol.  */

      #define SOCK_DCCP SOCK_DCCP

        SOCK_PACKET = 10,                 /* Linux specific way of getting packets

                                              at the dev level.  For writing rarp and

                                              other similar things on the user level. */

      #define SOCK_PACKET SOCK_PACKET

        /* Flags to be ORed into the type parameter of socket and socketpair and

           used for the flags parameter of paccept.  */

        SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the

                                              new descriptor(s).  */

      #define SOCK_CLOEXEC SOCK_CLOEXEC

        SOCK_NONBLOCK = 00004000       /* Atomically mark descriptor(s) as

                                              non-blocking.  */

      #define SOCK_NONBLOCK SOCK_NONBLOCK

      };

  2. 面向连接:
    1. 值:SOCK_STREAM = 1
    2. 特点:
      1. 传输数据不丢失
      2. 传输的数据按发送顺序
      3. 可以监控socket缓冲区,如果满了就暂停传输
      4. 多数的数据没有边界,可以传输较大数据
      5. 可以分多次传输一次接收,也就是多次write,一次read
  3. 面向消息:
    1. 值:SOCK_DGRAM = 2
    2. 特点:
      1. 传输数据可能丢失
      2. 传输的数据不按发送顺序,可能后发送的先到
      3. 传输的数据有边界,限制每次传输的数据大小

第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.4 参数三: __protocol 协议

  • 参数三:协议

  1. 头文件:#include<netinet/in.h>
  2. 这个和第二个参数( 第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.4 参数二:套接字类型)有关,如果是SOCK_STREAM = 1,则可以指定IPPROTO_TCP = 6;如果是SOCK_DGRAM = 2,则可以指定IPPROTO_UDP = 6
  3. /* Standard well-defined IP protocols.  */

    enum

      {

       //默认

        IPPROTO_IP = 0,     /* Dummy protocol for TCP.  */

    #define IPPROTO_IP                  IPPROTO_IP

        IPPROTO_ICMP = 1,        /* Internet Control Message Protocol.  */

    #define IPPROTO_ICMP            IPPROTO_ICMP

        IPPROTO_IGMP = 2,        /* Internet Group Management Protocol. */

    #define IPPROTO_IGMP           IPPROTO_IGMP

        IPPROTO_IPIP = 4,           /* IPIP tunnels (older KA9Q tunnels use 94).  */

    #define IPPROTO_IPIP              IPPROTO_IPIP

        //指定TCP

        IPPROTO_TCP = 6,           /* Transmission Control Protocol.  */

    #define IPPROTO_TCP               IPPROTO_TCP

        IPPROTO_EGP = 8,           /* Exterior Gateway Protocol.  */

    #define IPPROTO_EGP              IPPROTO_EGP

    IPPROTO_PUP = 12,            /* PUP protocol.  */

    #define IPPROTO_PUP              IPPROTO_PUP

    //指定UDP

        IPPROTO_UDP = 17,        /* User Datagram Protocol.  */

    #define IPPROTO_UDP             IPPROTO_UDP

        IPPROTO_IDP = 22,         /* XNS IDP protocol.  */

    #define IPPROTO_IDP               IPPROTO_IDP

        IPPROTO_TP = 29,           /* SO Transport Protocol Class 4.  */

    #define IPPROTO_TP                 IPPROTO_TP

        IPPROTO_DCCP = 33,      /* Datagram Congestion Control Protocol.  */

    #define IPPROTO_DCCP            IPPROTO_DCCP

        IPPROTO_IPV6 = 41,     /* IPv6 header.  */

    #define IPPROTO_IPV6             IPPROTO_IPV6

        IPPROTO_RSVP = 46,      /* Reservation Protocol.  */

    #define IPPROTO_RSVP            IPPROTO_RSVP

        IPPROTO_GRE = 47,        /* General Routing Encapsulation.  */

    #define IPPROTO_GRE              IPPROTO_GRE

        IPPROTO_ESP = 50,      /* encapsulating security payload.  */

    #define IPPROTO_ESP               IPPROTO_ESP

        IPPROTO_AH = 51,       /* authentication header.  */

    #define IPPROTO_AH                IPPROTO_AH

        IPPROTO_MTP = 92,       /* Multicast Transport Protocol.  */

    #define IPPROTO_MTP             IPPROTO_MTP

        IPPROTO_BEETPH = 94,   /* IP option pseudo header for BEET.  */

    #define IPPROTO_BEETPH                IPPROTO_BEETPH

        IPPROTO_ENCAP = 98,             /* Encapsulation Header.  */

    #define IPPROTO_ENCAP                  IPPROTO_ENCAP

        IPPROTO_PIM = 103,      /* Protocol Independent Multicast.  */

    #define IPPROTO_PIM              IPPROTO_PIM

        IPPROTO_COMP = 108,           /* Compression Header Protocol.  */

    #define IPPROTO_COMP          IPPROTO_COMP

        IPPROTO_SCTP = 132,     /* Stream Control Transmission Protocol.  */

    #define IPPROTO_SCTP             IPPROTO_SCTP

        IPPROTO_UDPLITE = 136, /* UDP-Lite protocol.  */

    #define IPPROTO_UDPLITE               IPPROTO_UDPLITE

        IPPROTO_RAW = 255,    /* Raw IP packets.  */

    #define IPPROTO_RAW            IPPROTO_RAW

        IPPROTO_MAX

      };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易学笔记(qq:1776565180)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值