socket()函数介绍
socket()函数介绍
- socket函数介绍
- 函数原型
- domain
- type
- protocol
- errno
- 示例
函数原型
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函数介绍
文章目录 1 socket函数介绍 1 socket函数介绍 #include <sys/types.h> /* See NOTES */ #include <sys/socket. ...
- Windows下OVERLAPPED相关的异步socket函数介绍
windows提供一组关联OVERLAPPED结构的套接字操作WSASocket.WSASend.WSARecv.WSAIoctl等. 1: WSASocket Description:The WSA ...
- php socket 函数介绍
php socket相关函数: ------------------------------------------------------------------------------------ ...
- 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
1 Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端 ...
- socket编程基础2(socket API函数介绍)
"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...
- socket主要函数介绍
1. 基本套接字函数 (1)socket函数原型 socket(建立一个socket文件描述符) 所需头文件 #include <sys/types.h> #include <s ...
- Socket编程-应用编程接口(API)--套接字(及其函数介绍)
文章目录 Socket编程-应用编程接口(API)--套接字 网络程序设计接口 应用编程接口 API 几种典型的应用编程接口 Socket编程-Socket API概述 Socket API 套接字就 ...
- connect函数介绍
文章目录 1 connect函数介绍 2 connect在TCP应用出错的可能场景 1 connect函数介绍 #include <sys/types.h> /* See NOTES */ ...
- listen函数介绍
文章目录 1 listen函数介绍 1 listen函数介绍 #include <sys/types.h> /* See NOTES */ #include <sys/socket. ...
最新文章
- python 的import m.a.b 和 from m.a import b的区别
- Elasticsearch入门之从零开始安装ik分词器
- 1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
- long类型python_Python如何管理int和long?
- xmx java_为什么我的Java进程比Xmx消耗更多的内存?
- HDOJ(HDU) 1785 You Are All Excellent(角度运算)
- 一些mootools的资源
- 《C专家编程》:编译器的金科玉律(一)
- 小微风控之财务评分模型的制定与应用
- Python爬虫从入门到精通——爬虫基础:HTTP基本原理
- 怎么把qlv格式转成mp4
- 校赛题解(部分)+反思
- JVM - 工欲善其事必先利其器之虚拟机工具(上)
- 论智能的起源、进化与未来
- python json模块_python json模块使用详情
- 做自媒体,不用露脸拍视频,方法都在这篇文章
- Peewee 使用手册
- [ipsec][crypto] 什么是AEAD加密算法中的AAD 及aad length
- 物联网SIM卡和SIM卡真的不是一回事
- 2022-05-14 Unity核心7——2D动画