博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket-accept
阅读量:4577 次
发布时间:2019-06-08

本文共 940 字,大约阅读时间需要 3 分钟。

摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。

accept函数等待并接受客户请求:

#include
int accept(int sockfd, struct sockaddr* addr, socklen_t* len)
复制代码
返回:非负描述字——成功,
-
1——失败

 

accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接字,这个套接字是连接套接字。此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;而accept返回是一个连接套接字,它代表着一个网络已经存在的点点连接。自然要问的是:为什么要有两种套接字?原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,同时在内核确实产生了一个这样的新的描述字。

参数sockfd
参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。当然客户不知道套接字这些细节,它只知道一个地址和一个端口号。
参数addr
这是一个结果参数,它用来接受一个返回值,这返回值指定客户端的地址,当然这个地址是通过某个地址结构来描述的,用户应该知道这一个什么样的地址结构。如果对客户的地址不感兴趣,那么可以把这个值设置为NULL。
参数len
如同大家所认为的,它也是结果的参数,用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。同样的,它也可以被设置为NULL。

 

如果accept成功返回,则服务器与客户已经正确建立连接了,此时服务器通过accept返回的套接字来完成与客户的通信。

转载于:https://www.cnblogs.com/newlist/archive/2012/02/19/2358469.html

你可能感兴趣的文章
C语言 strcpy,memcpy,memmove,memccpy函数
查看>>
C语言一个小程序的bug疑问 数组相关[已解决]
查看>>
几种排序算法(PHP版)
查看>>
数据库字段数据类型对索引的影响
查看>>
mesos cluster
查看>>
Altium Designer 中差分走线
查看>>
linux 解压缩命令
查看>>
GDUT校赛
查看>>
(HDU)1076 --An Easy Task(简单任务)
查看>>
团队精神与集体主义的区别?
查看>>
Spring Boot 入门(Spring Cloud方向)
查看>>
AngularJS(九):路由
查看>>
GPS.NET 和 GeoFramework开源了
查看>>
汇编:采用址表的方法编写程序实现C程序的switch功能
查看>>
AtiveMQ初次连接的 http error:503 连接错误 Prolem accessing /.Reason : Service Unavailable...
查看>>
OFO和摩拜共享单车
查看>>
Linux软件安装管理之1——rpm命令管理
查看>>
关于 Failed to establish a new connection: [Errno 11004] getaddrinfo failed',))的问题
查看>>
JavaScript中严格判断NaN
查看>>
json_encode不自动转义斜杠“/”的方法
查看>>