Linux之Socket函数(详细篇)

2023-09-13 10:12:09

本篇是基于Linux man手册的一些总结

socket作用: create an endpoint for communication

函数结构

```c
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
```

描述


socket() 创建一个通信端点并返回一个引用该端点的文件描述符。 成功调用返回的文件描述符将是当前未为进程打开的最小编号的文件描述符。

参数


- domain
    AF_INET 这是大多数用来产生socket的协议,使用TCP或UDP来传输,用IPv4的地址。
    AF_INET6 与上面类似,不过是来用IPv6的地址。
    AF_UNIX 本地协议,使用在Unix和Linux系统上,一般都是当客户端和服务器在同一台及其上的时候使用。
    还有一些不常用的AF_LOCAL,AF_AX25,AF_IPX等

- type
    SOCK_STREAM :是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。
    SOCK_DGRAM :是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。
    SOCK_SEQPACKET:是双线路的、可靠的连接,发送固定长度的数据包进行传输。必须把这个包完整的接受才能进行读取。
    SOCK_RAW:socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。(ping、traceroute使用该协议)。
    SOCK_RDM :这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据链路层使用,不保证数据包的顺序。

- protocol 
传0 表示使用默认协议。
- 返回值
    成功:返回指向新创建的socket的文件描述符,失败:返回-1,设置errno
    
socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。对于IPv4,domain参数指定为AF_INET。对于TCP协议,type参数指定为SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRAM,表示面向数据报的传输协议。protocol参数的介绍从略,指定为0即可。

更多推荐

写一篇nginx配置指南

nginx.conf配置找到Nginx的安装目录下的nginx.conf文件,该文件负责Nginx的基础功能配置。配置文件概述Nginx的主配置文件(conf/nginx.conf)按以下结构组织:配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理、缓存、日志、虚拟主机等

关于嵌入式人工智能?

关于嵌入式人工智能?虽然学术界目前还没有嵌入式人工智能的确切定义,但随着人工智能的发展,势必会下沉到边缘、终端和嵌入式市场。嵌入式人工智能将会是未来几年AI发展的方向之一,并将伴随一系列的职位和角色涌现。最近很多小伙伴找我,说想要一些嵌入式学习资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「嵌入式入

面试算法13:二维子矩阵的数字之和

题目输入一个二维矩阵,如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和?对于同一个二维矩阵,计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如,输入图2.1中的二维矩阵,以及左上角坐标为(2,1)和右下角坐标为(4,3)的子矩阵,该函数输出8。分析如果不考虑时间复杂度,则采用蛮力法用两个嵌套的循

基于SSM+Vue的乐购游戏商城系统

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用Vue技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统设计三、系统项目截图管理员功能模块前台功能模块用户功能模块四、

Pycharm中画图警告:MatplotlibDeprecationWarning

前言:\textcolor{Green}{前言:}前言:💞这是由于在python中画图出现的问题,一般不会有错。因为它只是个警告,但是我们也可以知道解决这个问题的方法,防止后面出问题的时候知道怎么解决。前因后果问题:原因解决方法一解决方法二问题:在使用Matplotlib的show方法时,控制台出现以下警告信息:Ma

【Python】Python 包 ③ ( Python 第三方包简介 | 安装第三方包 | 命令行安装 | PyCharm 安装 | 设置代理 | 使用第三方包开发 )

文章目录一、Python第三方包简介二、安装第三方包1、使用pip命令安装第三方包2、指定第三方包安装版本3、设置代理4、PyCharm中安装第三方包三、使用第三方包开发一、Python第三方包简介Python包中包含了很多Python模块,每个Python模块对应一个Python源码,其中包含了若干功能(函数);Py

Nginx配置文件详解

一、nginx的配置文件1、常见的配置文件及其作用nginx常见配置文件位置:安装路径/conf目录中。[root@centos7nginx]#tree.├──conf│├──fastcgi.conf│├──fastcgi.conf.default│├──fastcgi_params│├──fastcgi_params

pycharm中恢复原始界面布局_常用快捷键_常用设置

文章目录1恢复默认布局1.1直接点击file→ManageIDESettings→RestoreDefaultSettings(如下图所示):1.2直接点击RestoreandRestart,然后Pycharm就会自动重启,重启之后的界面就是最原始的界面了2改变主题2.1在PyCharm的右上角,点击“齿轮,然后点击:

ThreadPoolExecutor的使用

1.在SpringBoot项目中使用ThreadPoolExecutor:SpringBoot中可以通过创建一个配置类来定义ThreadPoolExecutor,然后在需要使用的地方直接注入即可。@ConfigurationpublicclassThreadPoolConfig{@BeanpublicExecutora

【OpenSSL】VC编译OpenSSL

VC编译OpenSSL编译工具准备编译OpenSSL建立`HelloWorld`工程创建VS工程编译工具准备安装好VisualStudio。安装Perl,主要是用来生成nmake的。准备好汇编语言编译工具nasm,并添加到path路径。下载好OpenSSL源代码。编译OpenSSL安装Perl,并加入到path路径,检

Sentinel控制台配置 持久化到nacos

sentinel控制台,使用方便,功能强大。使用官方的jar包,配置不会持久化,sentinel重启后会导致,之前的规则全部丢失,下面一起改造源码实现规则数据的持久化sentinel源码地址(github访问太慢,直接上镜像版)Sentinel:Sentinel是什么随着微服务的流行,服务和服务之间的稳定性变得越来越重

热文推荐