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函数,服务进程会阻塞到一个请求来。

 

posted @ 2017-02-17 10:25  天才麻将少年  阅读(401)  评论(0编辑  收藏  举报