socket函数

1、socket函数

1.1 socket函数原型

这里写图片描述

1.2 功能解析

每个进程的进程空间里都有一个socket描述符表。套接字描述符表属于一个进程,而socket地址结构位于操作系统的内核缓冲。

socket描述符表
socket描述符socket地址结构的地址

1.2 3个参数

1.2.1 family参数

这里写图片描述

1.2.2 type参数

这里写图片描述

1.2.3 protocol参数

这里写图片描述

1.2.4 family、type参数的组合


这里写图片描述
protocol参数也可设置为0,表示选择当前family和type组合下protocol的系统默认值

2、bind函数

2.1 bind函数原型

![这里写图片描述](https://img-blog.csdn.net/20150517121151755)

2.2 协议地址填写说明

绑定套接字和协议地址(包括地址和端口),协议族必须填写 ![这里写图片描述](https://img-blog.csdn.net/20150517121334665) 1)对服务器来说,需要填写一个众所周知的端口去监听,IP一般指定为INADDR_ANY 2)对用户来说(调用connect),远端主机地址和远端协议端口都是必须的。端口同样众所周知,是远端主机监听的端口;主机地址是远端主机的网络接口之一。本地主机地址和端口一般不由进程填写,而由内核填写( 如果进程填写的话就可以隐藏本地主机IP?)。 3)见accept调用

2.3 INADDR_ANY

对于IPv4, ![这里写图片描述](https://img-blog.csdn.net/20150516211533668) 对于IPv6, ![这里写图片描述](https://img-blog.csdn.net/20150516211707506) in6addr_any由系统预先初始化为IN6ADDR_ANY_INIT。后者在如下文件中声明
<netinet/in.h>

2.4 报错

函数调用出错时,errno的值会被修改。如13(#define EACCES 13 /* Permission denied */),98(#define EADDRINUSE 98 /* Address already in use */)

3、connect函数

3.1 connect函数原型

![这里写图片描述](https://img-blog.csdn.net/20150518130855387)

3.2 TCP套接字下可能的错误

1)ETIMEDOUT:TCP客户没有受到SYN分节响应 2)ECONNREFUSED:TCP客户收到的SYN分节响应RST(复位),即服务器主机在指定的端口上没有进程在等待连接(hard error) 产生RST的3种情况:①如是;②TCP想取消一个已有连接;③TCP收到一个根本不存在的连接上的分节 3)EHOSTUNREACH/ENETUNREACH:实际上是一个ICMP错误。客户的SYN分节在某个路由器上引发一个”destination unreachable”的ICMP错误(soft error)。错误返回客户主机后由内核保存并在等待一定时间后重发SYN分节。如果一直到超时都没有收到响应,则保存的ICMP错误作为EHOSTUNREACH或ENETUNREACH返回给进程。

4、listen函数

4.1 socket函数原型

这里写图片描述

4.2 使用说明

将传入的sockfd由未连接的主动套接字转换成一个被动套接字(监听套接字)
内核为监听套接字维护两个队列:为完成连接队列(已发出SYN分节并等待客户的ACK,处于SYN_RCVD状态),已完成连接队列(已完成TCP3路握手,处于ESTABLISHED状态)

4.3 backlog参数说明

历史上曾被规定成2个队列的总和
注意如果服务器的队列满了,内核将忽略新来的SYN分节。因为客户会间隔重发SYN分节,也许几秒后队列就有可用空间了。
这里写图片描述

5、accept函数

5.1 accept函数原型

这里写图片描述

5.2 accept参数说明

如果服务器不关心客户的信息(地址和端口),可传入空指针。

6、close函数

6.1 close函数原型

这里写图片描述

6.2 使用原型

对于一个一个TCP套接字,默认将把该套接字标记成关闭,并立即返回调用进程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值