上一篇博文select初探已经为大家较为详细地介绍了select()函数的使用方法。
下面我将继续为大家展示一个使用select()函数编写的socket通信的服务端与客户端的例子:
先上代码
fd_set rset;
int nready = 0;
socklen_t client_len = sizeof(cli_addr);
int clifd;
buffer = (char *)malloc(BUF_SIZE);
vec_client.push_back(listenfd);
for(;;)
{
FD_ZERO(&rset);
FD_SET(listenfd, &rset);
for(int i=0;i<vec_client.size();i++)
{
FD_SET(vec_client[i], &rset);
}
nready = select(vec_client[vec_client.size()-1]+1, &rset, NULL, NULL, NULL);
if(nready < 0)
{
Error(errno);
}
else if(nready > 0)
{
if(FD_ISSET(listenfd, &rset))
{
clifd = accept(listenfd, (struct sockaddr *)&cli_addr, &client_len);
if(clifd < 0)
{