#include "tcp.h"
#include "all.h"
#include "db.h"
#define N 100
int main(void)
{
int skt = tcp_server_init("0.0.0.0", 8888, 10);
//创建一张文件描述符集合表
fd_set table;
//清空表
FD_ZERO(&table);
//将skt加入表
FD_SET(skt, &table);
//监听最大值
int max = skt;
int nfd = 0;
int ret = 0;
int i;
char buf[N]={'\0'};
while(1)
{
fd_set tableTmp = table;
ret = select(max+1, &tableTmp, NULL, NULL, NULL);
if(ret <= 0)
{
continue;
}
for(i = 0; i < max+1; i++)
{
//判断是哪路响应
if(FD_ISSET(i, &tableTmp))
{
printf("%d号通道响应\n",i);
//判断是不是socket通道响应
if(i == skt)
{
//如果是,再开辟一条软通道传输数据
nfd = tcp_server_connect(skt);
if(nfd < 0)
{
continue;
}
printf("%d号通道被开通!\n",nfd);
//将开通的通道加到真实表中去
FD_SET(nfd, &table);
if(max < nfd)
{
max = nfd;
}
}
else
{
//若不是socket通道响应则读取数据
ret = recv(i,buf,N,0);
if(ret > 0)
{
//数据处理
fun_db(buf, i);
}
else
{
printf("%d号通道关闭\n",i);
//若读取到的数据为空则关闭通道
close(i);
FD_CLR(i, &table);
}
}
}
}
}
close(skt);
return 0;
}