UNP学习笔记(二),Socket编程基础

UNIX地址结构

当往一个socket函数传递上述地址结构时,所有的参数都是指针

用户态往内核传递地址指针的三个函数bind,connect,sendto

 从内核往用户态传递地址指针的三个函数accept,recvfrom,getsockname,getpeername

 这样除了给你对端的地址之外还用长度隐式的告诉你连接类型

UNIX大端小端的转换

 由于网络编程中都是网络字节,故需要使用转换函数

 h:host主机端,n:network网络端,s:short,l:long

字符串与unix地址结构相互转化的API

 

 inet_pton系列的函数存在一个问题,为了获得字符串我们需要定义一个struct sockaddr

由于LInux哲学中的一切皆文件的理念,进行网络编程时,第一件事就是开启网络的文件描述符socket

connect函数详解

功能:用于在客户端与服务器建立socket连接

原型

 其中fd为socket创建的描述符,返回值为与服务端通信所需要的fd,注意,客户端的这个socket不一定需要bind到一个固定的端口上,但没有bind时,将由系统分配一个端口

connect函数出现错误的情况

(1):对端没有回复SYN,此时再重试两次后(最多等待75s)返回ETIMEOUT错误

(2):对端回复RST复位,表明我们想要connect的端口不存在,是硬错误,此时将立即返回ECONNREFUSED

(3):中间的路由产生目的不可达的ICMP报文,处理方式与一类似

bind函数详解

功能:把一个套接字(ip+port)与sockfd绑定

原型为:

 手册中对bind函数的作用解释是bind为一个套接字命名

如果未bind的情况下调用listen和connect,那么系统将给这个连接分配对应的端口,对于客户端来说则是常见的,对于服务端则是不常见的,这个规则的例外是RPC调用

listen函数详解

功能:1.将一个socket转为被动状态(当一个套接字fd被创建时默认是主动连接),listen注册给内核,指示内核关注该sockfd的连接请求

        2.指示可以等待在该fd上的连接数(第二个参数,被称为backlog)

         调用listen函数后会为sockfd建立两个队列如下图

        

 

 linux上backlog参数的含义是进入EASTABLISH状态,但未被accept函数取出的数量

accept函数详解

功能:从ESTABLISH队列中取出一个连接

原型:

close函数详解

功能:主动关闭一个连接,调用后调用进程将不能再将关闭的fd作为read和write的第一个参数,但是仍然会将已经填充在TCP内核缓冲区中的数据发送给对端,然后发送FIN,注意,如果fork了子进程,那么有可能不会产生任何效果(子进程共享父进程的fd,并且将引用计数+ 1,close只是减少该进程的引用计数).而shutdown函数则会确确实实的直接发送一个FIN

getsockname和getpeername函数

功能:获取一个套接字的addr信息

原型:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值