惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
U
Unit 42
aimingoo的专栏
aimingoo的专栏
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
M
MIT News - Artificial intelligence
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
IT之家
IT之家
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
D
Docker
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News

Jiajun的技术笔记

你好,2026! TiDB 源码阅读(六):TiDB Coprocessor 源码解析 性能优化的核心思想 TiDB 源码阅读(五):索引 TiDB 源码阅读(四):AST、逻辑计划、物理计划 CockroachDB Serverless Architecture podman 无故退出 Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal Replace docker with podman Using xmonad with xfce4 A RC script for freebsd frpc 自己动手写一个k8s controller AI 会取代你的(编程)岗位吗? 自建DERP服务器提升Tailscale连接速度(使用Nginx转发) 自动升级Docker容器 再读《程序员修炼之道-从小工到专家》 让浏览器下载文件 再读《软件随想录》/《黑客与画家》/《软技能》 HTTP 压力测试中的 Coordinated Omission 2的补码 编程语言中的 context 是什么? flutter macOS 构建出错 Flatpak 使用小记 Golang CAS 操作是怎么实现的 PostgreSQL 当MQ来使用 Clash 结合 工作VPN 的网络设计 使用 PostgreSQL 搭建 JuiceFS PostgreSQL 配置优化和日志分析 有GitHub Copilot?那就可以搭建你的ChatGPT4服务 窗口函数的使用(以PG为例)
网络编程所需要熟悉的那些函数
Jiajun Huang · 2019-11-01 · via Jiajun的技术笔记

网络编程所需要熟悉的那些函数

注:图片来自《TCP/IP协议详解卷二:实现》

网络编程函数(recvfrom, sendto, listen, bind, accept等)

我们常用的网络协议栈是TCP/IP协议栈。

从发起连接的角度来看,我们有服务端和客户端,一般来说,我们把主动发起连接的那一方叫做客户端,等待 别人来连接的叫做服务端。

从协议上来讲,分为UDP和TCP。

因此,把上面两种分类组合一下,就有四种,我们来看看它们所需要用到的函数:

  • TCP客户端: socket -> connect -> send|recv -> shutdown|close
  • TCP服务端: socket -> bind -> listen -> accept -> send|recv -> shutdown|close

TCP编程(图片来自geeksforgeeks)

  • UDP客户端: socket -> connect -> recvfrom|sendto -> close
  • UDP服务端: socket -> bind -> recvfrom|sendto -> close

UDP编程(图片来自geeksforgeeks)

此外就是一些高级的函数,主要是I/O多路复用相关的:

  • select
  • pselect
  • poll
  • epoll
  • kqueue

不过,如果你不是用C的话,一般来说语言都已经封装好了,都会在对应的操作系统使用最优的I/O多路复用函数,例如 Linux上使用epoll,FreeBSD上使用kqueue等等。

基本上熟悉以上函数,就可以说得上一句”熟悉网络编程”了,至于精通嘛,估计要把TCP/IP协议详解卷二吃透了能称得上?



相关文章