#相关代码, [四号程序员] http://www.coder4.com

/*

?* main.cc

?*

?* ?Created on: 2009-11-30

?* ? ? ?Author: liheyuan

?* ? ?Describe: 非阻塞模式服务器(Echo服务器)

?*

?* ? Last Date: 2009-11-30

?* ? CopyRight: 2009 @ ICT LiHeyuan

?*/

?

#include

using namespace std;

?

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

?

#define SERVER_PORT 18000

?

#define SERVER_QUEUE 10

#define FD_SET_SIZE 10

#define MAX_BUF 16

?

int main() {

?

?? ?//设置服务器Addr,在18000,任意IP监听

?? ?int serverFd;

?? ?serverFd = socket(AF_INET, SOCK_STREAM, 0);

?

?? ?/* 设置 serverFd 为非阻塞方式 */

?? ?int opt = SO_REUSEADDR;

?? ?setsockopt(serverFd, SOL_SOCKET, opt, &opt, sizeof(opt));

?

?? ?struct sockaddr_in serverAddr;

?? ?socklen_t serverAddrLen = sizeof(sockaddr_in);

?? ?serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);

?? ?serverAddr.sin_port = htons(SERVER_PORT);

?

?? ?//绑定

?? ?if (bind(serverFd, (sockaddr*) &serverAddr, serverAddrLen)) {

?? ? ? ?cout << "Binding on " << SERVER_PORT << " fail." << endl;

?? ? ? ?return -1;

?? ?}

?

?? ?//创建等待队列

?? ?listen(serverFd, SERVER_QUEUE);

?

?? ?//设定fd_set

?? ?fd_set readfds, testfds;

?? ?FD_ZERO(&readfds);

?? ?FD_SET(serverFd,&readfds);

?

?? ?//非阻塞模式等待客户连接

?? ?struct sockaddr_in clientAddr;

?? ?int clientFd;

?? ?socklen_t clientAddrLen;

?? ?int len;

?? ?char buf[MAX_BUF];

?? ?while (1) {

?? ? ? ?FD_SET(serverFd,&readfds);

?? ? ? ?testfds = readfds;

?

?? ? ? ?//选择readfds中可用的fd

?? ? ? ?if (select(FD_SET_SIZE, &testfds, (fd_set *) NULL, (fd_set *) NULL,

?? ? ? ? ? ? ? ?(struct timeval *) NULL) > 0) {

?? ? ? ? ? ?if (FD_ISSET(serverFd,&testfds)) {

?? ? ? ? ? ? ? ?//如果服务器fd可用,则为accept

?? ? ? ? ? ? ? ?clientAddrLen = sizeof(sockaddr_in);

?? ? ? ? ? ? ? ?clientFd =

linux select 异步,Linux上用select()实现异步的Echo服务器相关推荐

  1. linux select 服务器,Linux下用select()实现异步的Echo服务器

    本例子使用异步socket(select方法)实现了ECHO服务器程序. 搞了一个晚上,终于弄好了,出现的问题主要如下: 这是最重要的问题!当读取完数据后,需要将数据重新FD_SET进去,特别是ser ...

  2. linux lftp下载目录,linux中使用lftp上传下载文件

    lftp是linux中一款ftp服务器相比windows中的ftp显得要复杂不少了,下面我来总结一下lftp文件上传,文件下载,及文件查找等等相关命令吧. lftp连接的几种方法,最常用的是lftp ...

  3. Linux系统编程——I/O多路复用select、poll、epoll

    参考:https://segmentfault.com/a/1190000003063859 Linux下的I/O复用与epoll详解:https://www.cnblogs.com/lojunren ...

  4. Linux下多路复用IO接口epoll/select/poll的区别

    select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高. Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认 ...

  5. linux网络编程(三)select、poll和epoll

    linux网络编程(三)select.poll和epoll 一.为什么会有多路I/O转接服务器? 二.select 三.poll 三.epoll 一.为什么会有多路I/O转接服务器? 为什么会有多路I ...

  6. Linux系统中Oracle数据库使用SELECT语句检索数据(1)实例应用

    Linux系统中Oracle数据库使用SELECT语句检索数据(1)实例应用 1,首先切换到Oracle用户,并进入数据库#sql / as sysdba2,启动数据库,并连接样例及表格,启动命令#s ...

  7. Linux Linux程序练习十二(select实现QQ群聊)

    //头文件--helper.h #ifndef _vzhang #define _vzhang#ifdef __cplusplus extern "C" { #endif#defi ...

  8. Linux网络编程 之 IO多路复用select(八)

    1. IO多路复用的概念 I/O多路复用是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. 2. select接口 #include & ...

  9. Linux下的I/O多路复用select,poll,epoll浅析

    转载:http://blog.csdn.net/u011573853/article/details/52105365 一,什么是I/O多路复用  所谓的I/O多路复用在英文中其实叫 I/O mult ...

最新文章

  1. 18.2 keepalived介绍
  2. 赛码浪潮笔试题库软件实施岗位_赛码 -HRTechChina中国人力资源科技-向上的力量!...
  3. python中导入的模块不能直接当方法用,需要采用模块.方法名或模块 as 别名,再别名.方法的形式
  4. TCL withSNPS info existscreate_cellcreate_netconnect_net
  5. python教程-做个淘宝双十一满减攻略
  6. 【没理解】为何JAVA虚函数(虚方法)会造成父类可以访问子类的假象?
  7. 114 Python程序中的进程操作-进程间通信(multiprocess.Queue)
  8. 武汉斗鱼php面试流程,斗鱼面试题
  9. 计算机的外面板接口,(电脑各种接口规范.doc
  10. 单片机函数:_crol_和_cror_
  11. 使用本地代理拦截网址及重定向
  12. 片上总线Wishbone 学习(四)接口信号定义
  13. 来世还做Java_“此生无悔入华夏,来世还做中国人”原话是什么?出自哪?
  14. 5.1 Runner构建优化
  15. JMockit 介绍 4 使用JMockit运行测试
  16. dreamweaver cs5 注册码及防激活
  17. 【OC】Blocks模式
  18. wps上下标怎么对齐_wps如何设置表格对齐方式图解
  19. java 邮件 已读回执_java – 在Firebase群组消息传递应用中实施已读回执功能
  20. 传统IDC部署网站(二)

热门文章

  1. 关于同源策略的一些想法
  2. TeeChart用法(网络收集)默认分类 2010-03-05 21:46:05 阅读788 评论0 字号:大中小 .
  3. javascript动态创建可拖动、最大化、最小化的层
  4. 设计一个函数能够取出字符串中指定的字符
  5. 数据结构与算法---笔记
  6. windows 包管理器scoop的使用
  7. 动态规划和贪心算法的区别
  8. Linux如何在系统启动时自动加载模块
  9. 【译】Economics of Fees and Gas
  10. Linux kernel 3.10内核源码分析--进程退出exit_code