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

#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. iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样

    // 上传多张图片 - (void)send { // 设置初始记录量为0 self.count = 0; self.upcount = 0; // 设置初始值为NO self.isUploadPic ...

  2. asp.net mvc输出自定义404等错误页面,非302跳转。

    朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filters ...

  3. Oracle SQL Developer 添加SQLServer 和Sybase 连接

    来源于: http://blog.csdn.net/kk185800961/article/details/8602306 1. 开始只有Oracle 和access 连接 2. 打开Oracle S ...

  4. php csv导出

    /** * 下载csv * @param unknown $orders_id * @param unknown $orders_date_start * @param unknown $orders ...

  5. 网络流HDU 2883

    建图           源点  ->     每个人  ->           每段时间      ->      汇点 时间要离散化一下 分成一些时间段 权           ...

  6. bzoj4403: 序列统计

    我们很容易发现答案是C(R-L+N+1,N)-1 然后用一下lucas定理就行了 #include <iostream> #include <cstdio> #include ...

  7. iOS推送后页面跳转

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  8. C++之再续前缘(一)——C++基础(与C语言的差异)(下)

    1.void型指针 void本身是一种数据类型,通常表示无值,不能声明void类型的变量,但是可以声明void类型的指针, void*类型的指针表示不确定的类型,是一种通用型的指针,也就是说任何类型的 ...

  9. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  10. O(nlogn)LIS及LCS算法

    morestep学长出题,考验我们,第二题裸题但是数据范围令人无奈,考试失利之后,刻意去学习了下优化的算法 一.O(nlogn)的LIS(最长上升子序列) 设当前已经求出的最长上升子序列长度为len. ...