必威体育Betway必威体育官网
当前位置:首页 > IT技术

socket中accept()函数的理解

时间:2019-10-06 00:13:04来源:IT技术作者:seo实验室小编阅读:83次「手机版」
 

accept函数

如果客户端有连接请求,必须使用下述函数来接受客户端的请求。

socket accept(

  SOCKET               s,

  struct sockaddr FAR  *addr,

  int FAR          *addrlen

);

addr用于存放客户端的地址,addrlen在调用函数时被设置为addr指向区域的长度,在函数调用结束后被设置为实际地址信息的长度。本函数会阻塞等待知道有客户端请求到达。

  返回值是一个新的套接字描述符,它代表的是和客户端的新的连接,可以把它理解成是一个客户端的socket,这个socket包含的是客户端的ip和port信息 。(当然这个new_socket会从sockfd中继承 服务器的ip和port信息,两种都有了),而参数中的SOCKET   s包含的是服务器的ip和port信息 。

于是之后的send和recv函数中的fd都是指这个 new_fd,也就是

int send(int new_fd, const void *msg, int len, int flags); 

int recv(int new_fd, void *buf, int len, unsigned int flags);

即参数其实都是目标fd(就是记录了客户端的信息 ),说明服务器是从客户端接收或者发送给客户端的。这个和文件的操作FILE *fp =fopen();   fwrite(fp,xx,xx,xx);是差不多的,这里的fp代表的也是目标即目标文件名。

  这样,客户端的 connect函数 ,

int connect (int sockfd, struct sockaddr *serv_addr, int addrlen);

这里的sockfd 就把客户端的ip和port  ,服务器的ip和port信息都有了。所以之后的 send(),recv()都有信息了。

----------------------------------------------------------------------------------------------------------------------------------------------------------

accept()函数 

准备好了,系统调用   accept()   会有点古怪的地方的!你可以想象发生   这样的事情:有人从很远的地方通过一个你在侦听   (listen())   的端口连接   (connect())   到你的机器。它的连接将加入到等待接受   (accept())   的队列   中。你调用   accept()   告诉它你有空闲的连接。它将返回一个新的套接字文   件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,   新的在准备发送   (send())   和接收   (   recv())   数据。这就是这个过程! 

相关阅读

socketpair的用法和理解

https://blog.csdn.net/longwang155069/article/details/54023186

析构函数写成virtual的好处

相信学习c++的很多同志都听过这样的建议:最好将类的析构函数写成虚函数,如下:class B { public: B() { printf("B()\n"); }

#SpringMVC--理解web.xml中的 url-pattern标签及其使

在web.xml中,我们通过下面的标签来匹配客户端发出的请求: <servlet-mapping> <servlet-name>yzh_ssh</servlet-name> <ur

sql 四大排名函数---(ROW_NUMBER、RANK、DENSE_RANK、N

1.ROW_NUMBER() 定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一

CSAPP(深入理解计算机系统)

前言 自己这段时间上了微机原理,想起来这本书也看完了,就一同综合做个笔记。因而有部分是只属于MIPS的,我会标注出来,如果不需要应

分享到:

栏目导航

推荐阅读

热门阅读