首页 > 编程知识 正文

socket提升accept效率(socket中accept()函数的理解)

时间:2023-05-04 04:45:35 阅读:123674 作者:4042

如果客户端发出连接请求,则必须使用以下函数接受客户端请求:

套接字接受(

插座s,

struct sockaddr FAR*addr,

int FAR*addrlen

);

addr用于存储客户端地址,addrlen在函数调用时设置为addr指向的区域长度,在函数调用结束后设置为实际地址信息的长度。 此函数等待客户端的请求到达。

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

于是,之后的send和recv函数的fd都是这个new_fd,即

intsend(intnew_FD,const void *msg,int len,int flags );

intrecv(intnew_FD,void *buf,int len,unsigned int flags );

也就是说,参数实际上是目标软盘,它包含客户端信息,并指示服务器是从客户端接收或发送的。 操作此和文件FILE *fp=fopen (; fwrite(FP、xx、xx、xx ); 是的。 这里的fp表示作为目标的目标文件名。

这样,客户端的connect函数,

intconnect(intsockfd,struct sockaddr *serv_addr,int addrlen );

这里的sockfd有客户端的ip和端口,服务器的ip和端口信息。 所以之后的send ()、recv )有信息。

——3354——3——3————33——33——3——33——33——3——33——33——333——33——3——33——33——3——3——33——3——3——33——333——33——33333

接受(函数

准备好了。 系统调用accept () )会有点奇怪! (有人从很远的地方拦截你(listen ) ) ) ) ) ) )通过端口连接到你的机器(connect ) ) ) ) )。 该连接将添加到等待接受(accept ) )的队列中。 你呼叫accept ()告诉他你有空闲的连接。 返回新的套接字文件描述符。 这样就有两个插座了。 原来的一个还在监听你的端口,新的是发送((send ) ) ) )和接收((recv ) ) ) ) )的数据) )。 这就是这个过程!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。