⟅UNIX网络编程⟆⦔socket函数

说在前面

基本说明

为执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型。

  • 定义

    #include <sys/socket.h>
    
    int socket(int domain, int type, int protocol);
    //栗子:int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
    参数说明:
    • domain
      指明协议域(或协议族)
      domain说明
      AF_INETIPv4协议
      AF_INET6IPv6协议
      AF_LOCALUNIX域协议
      AF_ROUTE路由套接字
      AF_KEY密钥套接字
      该参数还有其他值例如PF_xxx、AF_NS(很少使用)、AF_ISO(很少使用);
    • type
      指明套接字类型
      type说明
      SOCK_STREAM字节流套接字
      SOCK_DGRAW数据报套接字
      SOCK_SEQPACKET有序分组套接字
      SOCK_RAW原始套接字
      该参数还有其他值如SOCK_PACKET;
    • protocol
      指定协议
      protocol说明
      IPPROTO_TCPTCP传输协议
      IPPROTO_UDPUDP传输协议
      IPPROTO_SCTPSCTP传输协议
      该参数可设置为0,此时由前两个参数(domain、type)指定协议,其组合如下:
      AF_INETAF_INET6AF_LOCALAF_ROUTEAF_KEY
      SOCK_STREAMTCP/SCTPTCP/SCTP组合有效组合无效组合无效
      SOCK_DGRAWUDPUDP组合有效组合无效组合无效
      SOCK_SEQPACKETSCTPSCTP组合有效组合无效组合无效
      SOCK_RAWIPv4IPv6组合无效组合有效组合有效
    返回值:
    • 函数成功时,返回一个小的非负整数,称之为套接字描述符(socket descriptor),简称sockfd。该套接字描述符只需要指定协议族(IPv4、IPv6、UNIX)和套接字类型(字节流、数据报、原始套接字),不需要指定本地或者远程IP地址。
    • 函数失败时,返回-1并设置errno

AF_xxx对比PF_xxx

  • AF_前缀表示地址族;PF_前缀表示协议族。

    历史上曾经有这样的想法:单个协议族可以支持多个地址族,PF_值用来创建套接字,而AF_值用于套接字地址结构。但实际上,支持多个地址族的协议族从来就未实现过,而且头文件<sys/socket.h>中为一给定协议定的PF_值总是与此协议的AF_值相等,,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值