socket()函数详解!
函数原型
socket()函数的原型如下,这个函数建立一个协议族为domain、协议类型为type、协议编号为protocol的套接字文件描述符。如果函数调用成功,会返回一个标识这个套接字的文件描述符,失败的时候返回-1。
#include<sys/types.h>#include<sys/socket.h>int socket(int domain, int type, int protocol);
domain
函数socket()的参数domain用于设置网络通信的域,函数socket()根据这个参数选择通信协议的族。通信协议族在文件sys/socket.h中定义。
表1 domain的值及含义
名称 | 含义 | 名称 | 含义 |
---|---|---|---|
PF_UNIX,PF_LOCAL | 本地通信 | PF_X25 | ITU-T X25 / ISO-8208协议 |
AF_INET,PF_INET | IPv4 Internet协议 | PF_AX25 | Amateur radio AX.25 |
PF_INET6 | IPv6 Internet协议 | PF_ATMPVC | 原始ATM PVC访问 |
PF_IPX | IPX-Novell协议 | PF_APPLETALK | Appletalk |
PF_NETLINK | 内核用户界面设备 | PF_PACKET | 底层包访问 |
type
函数socket()的参数type用于设置套接字通信的类型,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(数据包套接字)等。
表2 type的值及含义
名称 | 含义 |
---|---|
SOCK_STREAM | Tcp连接,提供序列化的、可靠的、双向连接的字节流。支持带外数据传输 |
SOCK_DGRAM | 支持UDP连接(无连接状态的消息) |
SOCK_SEQPACKET | 序列化包,提供一个序列化的、可靠的、双向的基本连接的数据传输通道,数据长度定常。每次调用读系统调用时数据需要将全部数据读出 |
SOCK_RAW | RAW类型,提供原始网络协议访问 |
SOCK_RDM | 提供可靠的数据报文,不过可能数据会有乱序 |
SOCK_PACKET | 这是一个专用类型,不能呢过在通用程序中使用 |
并不是所有的协议族都实现了这些协议类型,例如,AF_INET协议族就没有实现SOCK_SEQPACKET协议类型。
protocol
函数socket()的第3个参数protocol用于制定某个协议的特定类型,即type类型中的某个类型。通常某协议中只有一种特定类型,这样protocol参数仅能设置为0;但是有些协议有多种特定的类型,就需要设置这个参数来选择特定的类型。
- 类型为SOCK_STREAM的套接字表示一个双向的字节流,与管道类似。流式的套接字在进行数据收发之前必须已经连接,连接使用connect()函数进行。一旦连接,可以使用read()或者write()函数进行数据的传输。流式通信方式保证数据不会丢失或者重复接收,当数据在一段时间内任然没有接受完毕,可以将这个连接人为已经死掉。
- SOCK_DGRAM和SOCK_RAW 这个两种套接字可以使用函数sendto()来发送数据,使用recvfrom()函数接受数据,recvfrom()接受来自制定IP地址的发送方的数据。
- SOCK_PACKET是一种专用的数据包,它直接从设备驱动接受数据。
errno
函数socket()并不总是执行成功,有可能会出现错误,错误的产生有多种原因,可以通过errno获得:
表3 errno的值及含义
值 | 含义 |
---|---|
EACCES | 没有权限建立制定的domain的type的socket |
EAFNOSUPPORT | 不支持所给的地址类型 |
EINVAL | 不支持此协议或者协议不可用 |
EMFILE | 进程文件表溢出 |
ENFILE | 已经达到系统允许打开的文件数量,打开文件过多 |
ENOBUFS/ENOMEM | 内存不足。socket只有到资源足够或者有进程释放内存 |
EPROTONOSUPPORT | 制定的协议type在domain中不存在 |
其他 |
示例
建立一个流式套接字:
int sock = socket(AF_INET, SOCK_STREAM, 0);
socket()函数详解!相关推荐
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
- c/c++ socket函数详解
转载自:https://www.cnblogs.com/liedElxa/p/10795398.html c/c++ socket函数详解 注意: 使用socketAPI前,要先将相关链接库(Ws2_ ...
- socket函数详解 (有了新的认识)
我们先来看一下socket函数的原型: SOCKET PASCAL FAR socket (int af, int type, int protocol); 典型的调用方式为: unsigned in ...
- SOCKET函数详解
socket原理 1.socket socket位于应用层和TCP/IP协议通信中间,抽象成一组接口 1.服务端首先初始化Socket(),然后和接口进行绑定bind()和监听listen(),然后调 ...
- socket编程:socket()函数详解
文章目录 1. 什么是socket? 1.1 意义 1.2 本质 1.3 应用 1.4 结论 2. socket() 函数参数介绍 2.1 参数1:int af 2.2 参数2:int type 2. ...
- python中socket详解_python socket函数详解
关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄得清楚.通透,并记录下来, ...
- linux socket函数详解,linuxSocket_函数.doc
垄话让蛤驻本扑缔蛙画乐谁啊绅驯钟鬼作娄醉龙嫂钠孝叔肛歼孽及蒂吐表蚕叉茂膏缮烫再熔汾帆帜钢姬苫云揣诊保绩判庞瞩芝揍蒲垃饿裔恍疗镊畏架浓谱极赤侨辆雀橱颓座寓卓皖森鬃香强孽饵讣蔽际狐颖钾妨壕托扯盐蛮它射图统 ...
- 【五】Socket函数详解
❤️ 专栏简介 :网络通信和Socket编程是Linux C/C++服务器开发的基础.本专栏从最基础的内容开始学习网络通信和socket编程的相关内容,循序渐进的掌握网络通信的和socket编程的相关 ...
- linux Socket send与recv函数详解
转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解 1 #include &l ...
最新文章
- C++11中std::async的使用
- 脏读和数据库一致性的分析
- 关于C语言运算符优先级的记忆技巧是什么?
- 云迹科技:站在酒店场景服务机器人的风口
- android 外部内容分享到app内,外部跳转APP
- 什么是java中的枚举法_enum枚举javajava,enum枚举使用详解+,总结
- springMVC 格式转换
- 强大的反编译软件Hopper Disassembler for Mac控制流程图详解
- 4.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Kong 的基本功能
- 优酷土豆并购是如虎添翼
- 如何正确彻底的删除2345软件
- Xilinx SDK 初学之–API函数笔记(AXI_GPIO)
- greensock插件下载_使用GreenSock插件轻松制作精美的Web动画
- Python爬取2万条微博热搜,带你揭开热搜趋势!
- 交银施罗德基金郭斐:集中心力,布好一盘“成长投资”
- 510cms渗透过程,挂马并提权
- linux串口互斥,UART0串口编程之在UC/OS—II中遭遇的危机
- SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!
- 给静态图片添加动态效果
- 传感器的应用/SurfaceView/制作简单的指南针