Linux 套接字socket的服务进程listen and accept

#include<sys/socket.h>

int listen(int sockfd,int backlog);

int accept(int sockfd,struct sockaddr *addr,socklen_t len);

还是一个例子:

#include "unp.h"

#include <time.h>

int main(int argc,char**argv){

listenfd=Socket(AF_INET,SOCK_STREAM,0);

bzero(&servaddr,sizeof(servaddr));

//..给servaddr赋值

Bind(listenfd,(SA*)&servaddr,sizeof(servaddr));

Listen(listenfd,LISTENQ);

for(;;)

{

 int connfd=Accept(listenfd,(SA*)NULL,NULL);

.. //write

}

在这里listen函数表达服务进程愿意接受连接请求!其中LISTENQ是请求连接队列上限!

一旦队满则服务进程拒绝其他请求。

在这里的accpet函数表达服务进程开始获取连接请求,并返回一个新的connfd 套接字。该套接字和远方的

客户端套接字连接。但是注意!!

listenfd 此时并没有和远方的客户端套接字建立连接!所以才可以继续接受其他请求。

在上面的例子中,如果很在意客户端的地址就可以这样改:

 int connfd=Accept(listenfd,(SA*)NULL,NULL);

int connfd=Accept(listenfd,(SA*)&sockaddr,sizeof(sockaddr));

如果并没有什么请求,服务进程却调用accept函数,服务进程会阻塞到一个请求来。

原文地址:https://www.cnblogs.com/zzzPark/p/6408662.html