Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31073
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 131
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-14 19:23
个人简介

a person

文章分类

全部博文(11)

文章存档

2015年(11)

我的朋友

分类: C/C++

2015-05-09 16:26:01


  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. int socket(int domain, int type, int protocol)

描述

    socket() 创建一个通信的终端,返回该终端的描述符。
    
    domain 指定了一个通信的网域,即指定协议簇中的一个,这些协议定义在 <sys/socket.h> 中,常用的有一下几个:
    AF_UNSPEC          0
    AF_UNIX                1
    AF_INET                 2
    AF_ROUTE            17

    type 指定了socket的通信类型,主要有一下几个:
    SOCKET_STREAM        1
    SOCKET_DGRAM          2
    SOCKET_RAW               3
    SOCK_SEQPACKET       5
    SOCK_PACKET              以废弃,过时的
      
    SOCKET_STREAM 支持连续、可靠、全双工、面向连接的字节流,该类型的socket只有在连接的状态下才能发送和接受数据;
    SOCKET_DGRAM   支持非面向连接的,不可靠的,最大长度固定的数据报;通常使用 recvfrom(可以指定接收数据的地址)来接收数据;
    SOCKET_RAW         原始套接字;
    
    protocol 指定一个特殊的协议;通常情况下,一个给定的协议和和一个给定的 socket type 决定了使用唯一的协议,这时候 protocol 就没有意义了,在这种情况下,设置 protocol 为0 。 但是有时候协议簇中的某个可以支持多个协议,在种情况下,就可以设置 protocol 决定使用那些协议;如AF_INET可以支持IPv4和IPv6,SOCKET_RAW 指定了任意类型的套接字类型,那么此时可以指定特定的 protocol,示例:
  
  1. socket(AF_INET, SOCK_RAW, IPPROTO_TCP | IPPROTO_UDP | IPPROTO_ICMP);
    protocol定义在<netinet/in.h>中,常见的有:
    IPPROTO_IP          0      /* Dummy protocol for TCP                        */
    IPPROTO_ICMP    1      /* Internet Control Message Protocol          */
    IPPROTO_IGMP    2      /* Internet Group Management Protocol     */
    IPPROTO_TCP      6      /* Transmission Control Protocol                */
    IPPROTO_UDP     17    /* User Datagram Protocol                          */
    IPPROTO_IPV6     41    /* IPv6-in-IPv4 tunnelling                             */
    IPPROTO_RAW    255  /* Raw IP packets                                        */
    这里要说明的时IPPROTO_IP,它依赖于socket typesocket domain自动选择,如 指定 type 为 SOCK_STREAM 和 domain 为AF_INET,将会自动使用TCP,就和使用 IPPROTO_TCP 一样。如果将 IPPROTO_IP , AF_INET , SOCK_RAW 配合使用,将会出错,因为内核不知道该选择使用那个协议。
    
   
阅读(1061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~