首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >socket常用函数知识点整理

socket常用函数知识点整理

原创
作者头像
windealli
修改2018-08-09 15:49:52
5670
修改2018-08-09 15:49:52
举报
文章被收录于专栏:windealliwindealli

函数功能

  • 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信号,或者忽略它。

持续更新中。。。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数功能
  • 知识点
    • connect() 三种失败场景
      • close() 与发送队列
        • close() 与 shutdown()
          • close() 与多进程
            • 一端调用close()后,另一端还在write()
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档