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