C++ socket函数解析
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函数解析相关推荐
- socket函数解析
socket函数详细解析 网络程序设计中的套接字系统调用socket()用来获得文件描述符. socket()函数的原型如下: int socket( int domian, int type, in ...
- C语言socket()函数解析(创建套接字)af地址族,ip地址类型(Address Family)INET(Inetnet)PF(Protocol Family)
文章目录 Linux 下的 socket() 函数 1) af 为地址族(Address Family),也就是 IP 地址类型 2) type 为数据传输方式/套接字类型 3) protocol 表 ...
- 【Socket网络编程】12. send()、recv()、sendto() 和 recvfrom() 函数解析
send().recv().sendto()和recvfrom()函数解析 一般情况下,send().recv()在TCP协议下使用,sendto().recvfrom()在UDP协议下使用,也可以在 ...
- socket的accept函数解析以及服务器和多个客户端的端口问题
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自 ...
- socket通信函数解析
目录 1.socket 2.bind 3.listen 4.connect 5.send 6.recv 7.select 8.setsockopt 9.closesocket 10.总结辨析 10.1 ...
- Socket函数说明
第六章 Socket函数说明 6.1 库函数综述 6.1.1 套接字函数 表6.1 Windows Sockets 1.1版本的Berkeley Sockets函数 accept() 确认外来 ...
- linux网络编程函数解析之——setsockopt / getsockopt用法
linux网络编程函数解析之--setsockopt / getsockopt用法 工程中无线传输方面的东西用到了setsockopt(),getsockopt().网上相关博客很多,而且类似,原文出 ...
- oracle rpad mysql_Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析
SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL 该语句拼接 时间 与 ...
- json数据解析_VBA 实践指南 -- Split函数解析Json数据
什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子 ...
最新文章
- Oracle安装配置手册
- java语言中解释方式是什么意思,Java语言快速入门·简答T
- 惊现试衣间照片流出??
- 表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸
- 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?
- 数据:DeFi总锁仓量突破230亿美元
- c#设计模式之简单工厂
- 路径规划算法:动态规划
- golang gzip解压
- 【Windows Server 2019】DHCP服务器配置与管理——验证DHCP服务 备份与恢复DHCP数据 Ⅲ
- 《剑指0ffer》刷题笔记 -01 二维数组中的查找
- “寻找下一代CTO”-- 机会啊
- javaScript(正则,DOM)
- VCS和Verdi学习
- 李宁卖咖啡,意欲何为?
- mp4封装格式各box类型讲解及IBP帧计算
- 法规遵从战略:晋升内部IT审计师的策略
- 和webshell第一次亲密接触
- SVN客户端无法连接服务器的问题
- secureCRT,永久设置,保护眼睛,配色方案
热门文章
- 社招三年后端: 海康威视二面2021.04.26
- Shell脚本中的shebang
- pycharm运行python程序环境配置
- 使用 WebSocket 连接 MQTT 服务器
- 微信小程序php返回数组,微信小程序 数组(增,删,改,查)等操作实例详解...
- 左连接 ,右连接,内连接和全外连接的4者区别
- tensorflow-GPU+win10+GT730安装
- Objective-c mvc的斯坦福大学课程的总结
- hdu acmsteps 1.3.6
- 创新生生不息!Polkadot Hackathon中这些团队选择在Moonbeam部署