socket()函数

intsocket(int domain, int type, int protocol);

socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。正如可以给fopen的传入不同参数值,以打开不同的文件。创建socket的时候,也可以指定不同的参数创建不同的socket描述符,socket函数的三个参数分别为:

domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。对于TCP/IP协议族,该参数置AF_INET。

type:指定socket类型。常用的socket类型有,流套接字类型SOCK_STREAM、数据报套接字类型SOCK_DGRAM、原始套接字SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等

protocol:就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。

注意:并不是上面的type和protocol可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。

当我们调用socket创建一个socket时,返回的socket描述字它存在于协议族(address family,AF_XXX)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用bind()函数,否则就当调用connect()、listen()时系统会自动随机分配一个端口。

通常用的TCP为流套接字,UDP为数据报套接字,由于当protocol为0时系统会自动选择type类型对应的默认协议,因此各有两种方法建立两种套接字:

TCP     SOCKET s = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP)

或      SOCKET s = socket(AF_INET,SOCK_STREAM, 0)

UDP    SOCKET s = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP)

或      SOCKET s = socket(AF_INET,SOCK_DGRAM,0)

而以下两句返回的肯定是无效套接字INVALID_SOCKET,使用WSAGetLastError()获取的错误代码为10043:

SOCKET s = socket(AF_INET, SOCK_DGRAM,IPPROTO_TCP)

SOCKET s = socket(AF_INET, SOCK_STREAM,IPPROTO_UDP)

也就是说决定套接字是基于哪种协议的不仅是protocol参数,更重要的还有type参数,尤其是当protocol为0时,type参数就决定了套接字选用那种协议。

C++ socket函数解析相关推荐

  1. socket函数解析

    socket函数详细解析 网络程序设计中的套接字系统调用socket()用来获得文件描述符. socket()函数的原型如下: int socket( int domian, int type, in ...

  2. C语言socket()函数解析(创建套接字)af地址族,ip地址类型(Address Family)INET(Inetnet)PF(Protocol Family)

    文章目录 Linux 下的 socket() 函数 1) af 为地址族(Address Family),也就是 IP 地址类型 2) type 为数据传输方式/套接字类型 3) protocol 表 ...

  3. 【Socket网络编程】12. send()、recv()、sendto() 和 recvfrom() 函数解析

    send().recv().sendto()和recvfrom()函数解析 一般情况下,send().recv()在TCP协议下使用,sendto().recvfrom()在UDP协议下使用,也可以在 ...

  4. socket的accept函数解析以及服务器和多个客户端的端口问题

     今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自 ...

  5. socket通信函数解析

    目录 1.socket 2.bind 3.listen 4.connect 5.send 6.recv 7.select 8.setsockopt 9.closesocket 10.总结辨析 10.1 ...

  6. Socket函数说明

    第六章  Socket函数说明 6.1  库函数综述 6.1.1  套接字函数 表6.1  Windows Sockets 1.1版本的Berkeley Sockets函数 accept() 确认外来 ...

  7. linux网络编程函数解析之——setsockopt / getsockopt用法

    linux网络编程函数解析之--setsockopt / getsockopt用法 工程中无线传输方面的东西用到了setsockopt(),getsockopt().网上相关博客很多,而且类似,原文出 ...

  8. oracle rpad mysql_Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析

    SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL 该语句拼接 时间 与 ...

  9. json数据解析_VBA 实践指南 -- Split函数解析Json数据

    什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子 ...

最新文章

  1. Oracle安装配置手册
  2. java语言中解释方式是什么意思,Java语言快速入门·简答T
  3. 惊现试衣间照片流出??
  4. 表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸
  5. 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?
  6. 数据:DeFi总锁仓量突破230亿美元
  7. c#设计模式之简单工厂
  8. 路径规划算法:动态规划
  9. golang gzip解压
  10. 【Windows Server 2019】DHCP服务器配置与管理——验证DHCP服务 备份与恢复DHCP数据 Ⅲ
  11. 《剑指0ffer》刷题笔记 -01 二维数组中的查找
  12. “寻找下一代CTO”-- 机会啊
  13. javaScript(正则,DOM)
  14. VCS和Verdi学习
  15. 李宁卖咖啡,意欲何为?
  16. mp4封装格式各box类型讲解及IBP帧计算
  17. 法规遵从战略:晋升内部IT审计师的策略
  18. 和webshell第一次亲密接触
  19. SVN客户端无法连接服务器的问题
  20. secureCRT,永久设置,保护眼睛,配色方案

热门文章

  1. 社招三年后端: 海康威视二面2021.04.26
  2. Shell脚本中的shebang
  3. pycharm运行python程序环境配置
  4. 使用 WebSocket 连接 MQTT 服务器
  5. 微信小程序php返回数组,微信小程序 数组(增,删,改,查)等操作实例详解...
  6. 左连接 ,右连接,内连接和全外连接的4者区别
  7. tensorflow-GPU+win10+GT730安装
  8. Objective-c mvc的斯坦福大学课程的总结
  9. hdu acmsteps 1.3.6
  10. 创新生生不息!Polkadot Hackathon中这些团队选择在Moonbeam部署