好长时间没有写了,其实一直在坚持学习。

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdlib.h> int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
int result;
fd_set readfds, testfds; server_sockfd = socket(AF_INET, SOCK_STREAM, ); server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);//允许任何ip连接
server_address.sin_port = htons();
server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr*)&server_address, server_len);
listen(server_sockfd, ); FD_ZERO(&readfds);
FD_SET(server_sockfd, &readfds);//将监听套接字放到可读集合中 while(){
char ch;
int fd;
int nread; testfds = readfds; printf("server waiting\n"); result = select(FD_SETSIZE, &testfds, (fd_set*), (fd_set*), (struct timeval*));//时间指针为0:表示一直阻塞,如果返回小于1表示程序出错
if(result < ){
perror("server5");
exit();
} for(fd = ; fd < FD_SETSIZE; ++fd){
if(FD_ISSET(fd, &testfds)){
if(fd == server_sockfd){//监听套接字可读表示,有新连接
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_address, &client_len);
FD_SET(client_sockfd, &readfds);//将客户端套接字放到可读集合中
printf("adding client on fd %d\n", client_sockfd);
}else{
ioctl(fd, FIONREAD, &nread); if(nread == ){//读到0字节表示客户端断开socket
close(fd);
FD_CLR(fd, &readfds);//将套接字从集合中清除
printf("removing client on fd %d\n", fd);
}else{ read(fd, &ch, );
sleep();
printf("serving cient on fd %d\n", fd);
ch++;
write(fd, &ch, );
} }
}
} } }

select例子的更多相关文章

  1. select、poll、epoll用法

    我们先从著名的C10K问题开始探讨,由于早期在网络还不普及的时候,互联网的用户并不是很多,一台服务器同时在线100个用户估计在当时已经算是大型应用了.但是随着互联网的发展,用户群体迅速的扩大,每一个用 ...

  2. select,poll,epoll之api笔记

    参考:http://www.cnblogs.com/Anker/p/3265058.html select /* According to POSIX.1-2001 */ #include <s ...

  3. vs2012 连接oracle11g 及数据的insert及select 的总结

    下载链接Oracle 11g所需的驱动ODTwithODAC1120320_32bit,下载链接为http://www.oracle.com/technetwork/topics/dotnet/uti ...

  4. mybatis动态sql

    MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素.  if choose(when,otherwise) trim(where,set) foreach 例子(2): &l ...

  5. 协程、异步IO

    协程,又称微线程,纤程.英文名Coroutine,协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器 ...

  6. python之路-Day11

    引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾下 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程: ...

  7. SQL Server安全(5/11):架构与安全(Schemas and Security)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  8. 10月23日上午PHP数组

    正则表达式 1.替换 $s = "hello5world"; $s = preg_replace("/\d/","#",$s); echo ...

  9. Python的平凡之路(10)

    异步IO 数据库 队列 缓存 1.Gevent协程 定义:用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下 ...

随机推荐

  1. 关于QString中的arg()函数使用方法

    例:正确做法:ui->label->setText(QString("Processingfile%1").arg(index));错误做法: ui->label ...

  2. DEDE列表页直接获取下载链接

    我们得去设置软件频道的东西,先点击“核心”->"内容管理模型"中的软件模型进行编辑,将softlinks加入列表字段. 然后进入“系统”->"软件频道设置&q ...

  3. hdu3410 单调队列

    Passing the Message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. Activiti 学习笔记(2016-8-30)

    前言 不管学习什么,都必须对知识体系中专有的名词或者特定的语言组织方式 有所了解. 本文仅记录学习过程中的笔记,参考意义因人而定,不保证所言全部正确. 学习方式,百度传课的视频<权威Activi ...

  5. 关于Yii2中CSS,JS文件的引入心得

    js和css的引入 use yii\helpers\Html; 1.全局引入,所有的view生效 /assets/AppAsset.php public $css = [ 'css/site.css' ...

  6. AfNetworking 3.0源码解读

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  7. 解决: is not found. Have you run APT to generate them?

    WSSERVLET11: failed to parse runtime descriptor: runtime modeler error: Wrapper class com.gdpy.servi ...

  8. Android笔试和面试提点

    Android基础知识 Android 的四大组件是哪些? Activity,Service,Broadcast和ContentProvide Android 的常用的容器布局是哪些? FrameLa ...

  9. 57. Android之程序调试LogCat (转)

    无论什么样的程序开发过程中,出现错误都是不可避免的,一般情况下,语法错误会被开发环境检测到,并能及时的提示我们错误的位置以及修改的方法,但是逻辑错误就不是那么容易被发现了,通常逻辑错误的定位和分析是一 ...

  10. jQyery实现轮播器

    看到各大网站上都有一个轮播器的效果,自己不禁也想做一个,查了资料,看了轮播器的原理,慢慢的试着做了做,最终效果勉勉强强 原理:如图,试想一下,若是将<ul>的width属性值设置的很宽,直 ...