【C语言】socket函数

一、socket函数函数的原型

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

其中:

  • domain参数指定套接字应该使用的协议族(例如,AF_INET表示IPv4协议族)。
  • type参数指定套接字类型(例如,SOCK_STREAM表示流套接字,用于TCP连接;SOCK_DGRAM表示数据报套接字,用于UDP通信)。
  • protocol参数通常设置为0,表示使用默认的协议。

如果socket函数成功创建了一个套接字,它将返回一个非负的套接字描述符(socket descriptor),可以用于后续的套接字操作(如连接、绑定、监听等)。如果函数失败,它将返回-1,并且可以通过查看全局变量errno来获取错误码,以便进一步处理错误。

除了返回值之外,socket函数还可能设置全局变量h_errno以指示特定的主机端错误。但是,在现代的Linux系统中,通常使用getsockopt()函数来获取套接字的选项和状态信息,而不是依赖h_errno变量。

二、创建套接字的典型用法示例

#include <sys/types.h>
#include <sys/socket.h>

int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
    // 错误处理
    perror("socket");
}

在上面的例子中,如果`socket`调用成功,`sockfd`将包含一个非负的文件描述符。如果调用失败,则会执行错误处理代码。

三、socket描述符是否会为0?

在Unix和Linux系统中,文件描述符(file descriptor)是一个非负整数,其中特定的值0、1、2通常被预留用作标准输入(stdin)、标准输出(stdout)和标准错误(stderr)流。当一个进程启动时,这三个文件描述符会默认分别被分配给这三个标准流。
因此,在大多数情况下,任何新创建的文件或套接字文件描述符将从3开始递增(假设没有手动关闭或更改过上述描述符)。这不是一个硬性的规则,但是在正常操作条件下,在调用`socket`等函数创建新的文件描述符时,系统会选择最小的、未被使用的非负文件描述符值。通常,这个值在正常程序运行时不会是0、1或2。
然而,如果程序关闭了标准输入、输出或错误(例如调用了`close(0);、close(1);或close(2);),那么下一次请求文件描述符的系统调用(比如socket`)可能会返回0、1或2,因为这些文件描述符号又重新变成可用的。为了避免这种情况的潜在混乱和错误,应该避免关闭这些特殊的文件描述符,除非有特别的理由并且有意识地处理它们。
所以,在一般程序设计实践中,如果`socket`调用成功,返回的文件描述符通常不会是0,除非程序已经关闭了标凈输入或其他与之相关的文件描述符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/376126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云游戏服务器多少钱一个月?

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

MATLAB语音去噪系统

目录 一、背景 二、GUI页面 三、程序 3.1 LMS滤波程序 3.2 GUI程序 四、附录 一、背景 本文介绍了一种最佳的自适应滤波器结构&#xff0c;该结构采用最小均方差&#xff08;LMS&#xff09;作为判据&#xff0c;通过不断迭代自适应结构来调整得到最佳滤波器…

Godot 游戏引擎个人评价和2024年规划(无代码)

文章目录 前言Godot C# .net core 开发简单评价Godot相关网址可行性 Godot(GDScirpt) Vs CocosGodot VS UnityUnity 的裁员Unity的股票Unity的历史遗留问题&#xff1a;Mono和.net core.net core的开发者&#xff0c;微软 个人的独立游戏Steam平台分成说明独立游戏的选题美术风…

Win32 SDK Gui编程系列之--ListView自绘OwnerDraw

ListView自绘OwnerDraw 1.ListView自绘OwnerDraw 正在试错是否使用了列表视图,尽量制作出智能的表格编辑器。本页显示了业主抽签的表格数据(二维数组数据)的显示方法。 显示画面和整个程序如下所示。使用ListView_GetSubItemRect宏的话,就不需要getRect函数了。 当nCol的…

归并排序(Java)

归并排序是常见的八大排序算法之一&#xff0c;归并排序也是一种时间复杂度比较好的一种算法&#xff0c;为0(n*logn)级别。 归并排序可以用递归和非递归两种方式来实现&#xff0c;当然&#xff0c;递归方法是比较简单的&#xff0c;而非递归则是相对而言比较难的一种思路。 归…

使用 NtQuerySystemInformation 遍历进程信息

在 Windows 操作系统中&#xff0c;了解正在运行的进程的信息对于系统管理和性能优化至关重要。通过遍历系统进程信息&#xff0c;我们可以获取进程的 ID、名称、线程数、句柄数以及各种性能指标&#xff0c;从而帮助我们了解系统的运行状况并进行必要的调整和优化。本文将详细…

python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

Quicker读取浏览器的书签(包括firefox火狐)

从edge换了火狐&#xff0c;但是quicker不能读取本地的bookmarks文件了&#xff0c;就研究了一下。 方法1&#xff1a;读取本地Bookmarks文件&#xff08;仅谷歌内核浏览器&#xff09; 谷歌内核的浏览器本地会有Bookmarks文件&#xff0c;放了所有的书签数据&#xff0c;直接…

新版MQL语言程序设计:键盘快捷键交易的设计与实现

文章目录 一、什么是快捷键交易二、使用快捷键交易的好处三、键盘快捷键交易程序设计思路四、键盘快捷键交易程序具体实现1.界面设计2.键盘交易事件机制的代码实现 一、什么是快捷键交易 操盘中按快捷键交易是指在股票或期货交易中&#xff0c;通过使用快捷键来进行交易操作的…

故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab) 模型描述 时间卷积神经网络(TCN)是一种用于序列数据建模和预测的深度学习模型。它通过卷积操作在时间维度上对序列数据进行特征提取,并且可以处理可变长度的输入序列。 要使用TCN进行…

昆仑万维发布天工 2.0 大语言模型及AI助手App;AI成功破解2000年前碳化古卷轴

&#x1f989; AI新闻 &#x1f680; 昆仑万维发布天工 2.0 大语言模型及AI助手App 摘要&#xff1a;昆仑万维近日推出了新版MoE大语言模型“天工 2.0”和相应的“天工 AI 智能助手”App&#xff0c;宣称为国内首个面向C端用户免费的基于MoE架构的千亿级参数大模型应用。天工…

购物车底部工具栏全选、总价、总数量实现

购物车商品加一个checked属性 定义allChecked属性 <!-- 底部工具栏 开始 --> <view class"footer_tool"><!-- 全选 开始 --><view class"all_chk_wrap"><checkbox-group><checkbox checked"{{allChecked}}">…

视频上传 - 断点续传那点事

在上一篇文章中&#xff0c;我们讲解了分片上传的实现方式。在讲解断点续传之前&#xff0c;我要把上篇文章中留下的问题讲解一下。读过上一篇文章的小伙伴们都知道&#xff0c;对于分片上传来说&#xff0c;它的传输方式分为2种&#xff0c;一种是按顺序传输&#xff0c;一种是…

如何安装x11vnc并结合cpolar实现win远程桌面Deepin

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff…

机器学习系列——(十六)回归模型的评估

引言 在机器学习领域&#xff0c;回归模型是一种预测连续数值输出的重要工具。无论是预测房价、股票价格还是天气温度&#xff0c;回归模型都扮演着不可或缺的角色。然而&#xff0c;构建模型只是第一步&#xff0c;评估模型的性能是确保模型准确性和泛化能力的关键环节。本文…

微信小程序解决华为手机保存图片到相册失败

1.新增隐私设置 2.优化代码 新增uni.authorize判断 _saveCode() {let that this;console.log(点击了保存图片)console.log(this.result)uni.authorize({scope: scope.writePhotosAlbum,success(e) {console.log(e)if (this.result ! "") {uni.saveImageToPhotosAlb…

github使用问题汇总

1. Permission denied 1.1. 问题描述 Permission denied (publickey). fatal: Could not read from remote repository. 1.2. 解决方法 生成公钥 ssh-keygen -t ed25519 -C "your_emailexample.com" 点击回车三次 Generating public/private ed25519 key pair. …

使用Nginx搭建旁路服务器获取客户端真实IP

一、前言 在实际业务开发过程中&#xff0c;很多时候有记录客户端真实IP的需求&#xff0c;但是从客户端发送的请求往往会经过很多代理服务器&#xff0c;导致后端服务获取的IP为代理以后的IP&#xff0c;不具有业务含义。为了解决这个问题&#xff0c;可以搭建一个旁路服务器…

上海亚商投顾:沪指涨超3% 深成指和创指双双飙涨超6%

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 今日A股三大指数一改近期低迷状态&#xff0c;早盘小幅低开后一路高歌猛进集体大涨&#xff0c;沪指涨超3%&am…

YUM | 包安装 | 管理

YUM 功能 软件包安装&#xff1a; 通过yum命令安装软件包。例如&#xff0c;安装一个名为 example-package 的软件包 yum install example-package更新包 检查更新&#xff1a; 检查可用更新&#xff1a; sudo yum check-update <package_name>软件包更新&#xff1a; y…