龙空技术网

第五十章、accept函数和close函数

C语言学习探讨 422

前言:

而今姐妹们对“c语言accept”大概比较注重,小伙伴们都需要分析一些“c语言accept”的相关文章。那么小编同时在网摘上搜集了一些对于“c语言accept””的相关知识,希望我们能喜欢,大家一起来学习一下吧!

上一章了解了listen函数,这一章在学习两个函数:accept和close

我们先来看下accept函数,accept函数是从监听套接字的完成连接队列中接收一个连接,如果完成连接队列为空,那么这个进程休眠。

我们还是一样,先来看下它的定义:

int accept (int __fd, __SOCKADDR_ARG __addr,socklen_t *__restrict __addr_len)

我们来看下它的参数有哪些:

1、 fd:指定套接字描述符

2、 addr:指向一个Internet套接字地址结构的指针

3、 Addr_len:指向一个无符号整形变量的指针。

accept执行成功是返回3个结果:返回一个新的套接字描述符,标识这个接收的连接,addr指向结构变量中存储客户机地址,addr_len指向的整形变量中存储客户机地址的长度,如果对客户机的地址和长度都不感兴趣,可以将参数addr和addr_len设置为NULL。

若accept执行失败,返回-1。

当函数accept阻塞等待已经建立连接时,如果进程捕获到信号,那么函数将以错误返回返回,错误类型为EINTR。对于这种错误,一般重新调用函数accept来接收连接。

接下来我们再来看一下close函数

close函数,顾名思义它是用来关闭的,它的作用是关闭一个套接字描述符。

要使用close函数需要引入unistd.h头文件

我们来看下它的定义:int close (int __fd);

参数fd就是要关闭的套接字描述符。函数close执行成功时返回0,否则返回-1.

套接字描述符的close操作和文件描述符的close操作一样,close将套接字描述符的引用计数减一,如果描述符的引用计数大于0,则表示还有进程引用这个描述符,函数close正常返回,如果描述符的引用计数变为0,则表示在没有进程引用这个描述符,于是启动清除套接字描述符的操作,函数close立即正常返回。

调用close之后,进程将不再能访问这个套接字,但是这不表示TCP协议删除了这个套接字,TCP协议将继续使用这个套接字,将尚未发送的数据传递到对方,然后发送FIN数据段,执行关闭操作。一直等到这个TCP连接完全关闭滞后,TCP协议才删除这个套接字。

好了我们来看下代码吧:

好了今天就到这里吧,如果大家喜欢的话请加关注哦。

标签: #c语言accept