socket常用函数知识点整理

函数功能

  • socket(): 创建一个网络通信的endpoint(主动套接字),绑定协议族。
  • connect(): 发起TCP三次握手
  • bind(): 套接字绑定本地协议地址
  • listen(): a. 把套接字设置为被动套接字;b.告诉内核允许为该套接字排队的最大连接个数。
  • accept(): 返回已完成连接队列的队头
  • read():
  • write():
  • close(): 套接字描述符的引用计数减1,如果引用计数为0则发起四次挥手。

知识点

connect() 三种失败场景

  1. 超时。
  2. 对端主机在指定端口上没有进程等待连接。
  3. 目的不可达(路由失败)。

close() 与发送队列

调用close() 之后,进程不能再使用该描述符。 但是已经发送队列中的数据还是会继续发送,等到发送回再发起四次挥手。

close() 与 shutdown()

close() 在套接字引用计数为0时,才发起四次挥手。

shutdown() 直接出发四次挥手。

close() 与多进程

父进程fork出子进程处理已连接的套接字后,应该立即调用close()。 避免父进程描述符耗尽,且客户连接都没有被珍重终止。

一端调用close()后,另一端还在write()

对端(假设为client)调用close(),即向server发送了FIN报文,关闭了单向通道。此时如果server没有感知到还在write,第一次write可以调用成功(返回要发送的字节数)。 数据包可以发送到client端。但是对端会返回RST报文。

如果再调用write()(第二次), 则会受到SIG_PIPE信号,导致进程退出。 一般的做法是捕获SIGPIPE信号,或者忽略它。

持续更新中。。。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

小哥哥,小姐姐,我有一份tcp、http面试指南你要吗?

要说http就绕不开tcp,TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。但是,http是基于tcp协议的。

1224
来自专栏后端技术探索

Nginx防止大图片占满带宽

修改nginx配置文件中图片访问的配置部分 对于正常小图的访问不限制,把正常图的大小限定为 100K 以内,超出时就进行限速,速度限定为最大 100k/s

982
来自专栏吴伟祥

HTTP 和 Socket 的区别 原

      在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系.

942
来自专栏网络 后台

TCP TIME_WAIT

从图中可以看出,若服务器主动关闭连接,在四次挥手的最后一个ACK后连接端口会变为TIME_WAIT状态, 状态停留时长为两个MSL(最大分段寿命),这个状态只有...

5350
来自专栏landv

烽火2640路由器命令行手册-02-接口配置命令

本文描述用于不同类型接口的基本命令,这些命令对应于手册包括的接口配置任务,有关配置要点,参考下面列出的各项内容。

1422
来自专栏专注研发

SSH免密码登录配置

ssh免密码登录Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 的解决方案

8073
来自专栏Java进阶架构师

一篇文章带你详解 HTTP 协议(上)

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从链路层往上走。如下:

1204
来自专栏专注 Java 基础分享

看懂「www.google.com」背后的逻辑

在前两篇文章中,我们完整的描述了计算机网络 OSI 五层模型的相关内容。那么,本篇将会从一个实践案例开始,带你从整体上重新认识我们的计算机网络。

940
来自专栏向治洪

maven配置详解

什么是pom?     pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺...

2495
来自专栏王亚昌的专栏

开多少个FCGI进程才合适

    现在网站很多都用FCGI布署到WEB SERVER上提供服务,但同一个服务的FCGI开多少个进程才合适呢?

791

扫码关注云+社区

领取腾讯云代金券