首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>其他编程>正文

对于Linux socket与epoll配合相关的一些心得记录

http://www.oklinux.cn  2008-07-31  linuxidc   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的

int nRecvBuf=32*1024;//设置为32K

setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));

通过上面语句可以简单设置缓冲区大小,测试证明:跟epoll结合的时候只有当单次发送的数据全被从缓冲区读完毕之后才会再次被触发,多次发送数据如果没有读取完毕当缓冲区未满的时候数据不会丢失,会累加到后面。

如果缓冲区未满,同一连接多次发送数据会多次收到EPOLLIN事件。

单次发送数据>socket缓冲区大小的数据数据会被阻塞分次发送,所以循环接收可以用ENLIGE错误判断。

如果缓冲区满,新发送的数据不会触发epoll事件(也无异常),每次recv都会为缓冲区腾出空间,只有当缓冲区空闲大小能够再次接收数据epollIN事件可以再次被触发

接收时接收大小为0表示客户端断开(不可能有0数据包触发EPOLLIN),-1表示异常,针对errorno进行判断可以确定是合理异常还是需要终止的异常,>0而不等于缓冲区大小表示单次发送结束。

如果中途临时调整接收缓存区大小,并且在上一次中数据没有完全接收到用户空间,数据不会丢失,会累加在一起。

所以总结起来,系统对于数据的完整性还是做了相当的保正,至于稳定性没有作更深一步的测试。 (出自:凌晓web部落)


上一篇:将Sybase数据库的sa密码重置为空的实用方法   下一篇:编译Linux时出现:“错误:数组元素的类型不完全”

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·编译Linux时出现:“错误:数组元素的类型不完全”
·Linux与xp下的计算时间比较
·php中init()函数和Linux系统的init进程
·我的ARM-Linux初之旅
·Linux下java swing问题的解决
·Linux环境下多线程实现同时连接多个蓝牙设备
·编程时慎用“\”为路径分隔符
·Linux中加载动态链接库的三种方法
·Ubuntu free以及Linux内存占用大的解释
·Linux内核模块内存申请与释放
·Linux驱动开发之device与driver关系趣谈
·Linux中vi进行字符替换
·让java程序在Linux后台运行
·清理Linux内核——基于Ubuntu发行版
·Linux手机操作系统开发中 不提倡用多线程
·c 与java(c#)之间对比分析
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·编译Linux时出现:“错误:数组元素的
·Linux与xp下的计算时间比较
·php中init()函数和Linux系统的init进程
·我的ARM-Linux初之旅
·Linux下java swing问题的解决
·Linux环境下多线程实现同时连接多个蓝
·编程时慎用“\”为路径分隔符
·Linux中加载动态链接库的三种方法
·Ubuntu free以及Linux内存占用大的解释
·Linux内核模块内存申请与释放
·Linux驱动开发之device与driver关系趣
·Linux中vi进行字符替换
  阅读排行
·开源空间 网络安全工具开发函数库Libne
·Linux下Qtopia Core 4.3(QT/E)交叉编译
·Linux编程时获取当前时间实例解析
·Linux socket编程实例:echo服务器程序
·Linux环境下OpenGL编程学习
·升级Redhat Linux 9.0内核有感
·GNU/Linux应用程序编程:用管道进行编
·Linux中断处理学习笔记
·Linux系统中限制用户进程CPU及内存占用
·解决Linux中Matlab中文乱码问题
·Linux下安装g77 fortran complier过程
·Linux环境下Wine的中文显示以及freetyp
·SUSE Linux中安装Quartus 7.2过程笔记
·Linux程序设计入门 系统进程的详细介绍
·如何在Ubuntu 7.0上实现C/C++开发环境
网摘收藏: