当前位置:  技术问答>linux和unix

ubuntu12.04中epoll设为“边缘触发”的疑惑

    来源: 互联网  发布时间:2017-04-13

    本文导语:  学习epoll模型的时候,我的服务器端设置为边缘触发,然后每次epoll_wait之后只接收100字节的内容。 客户端连接server之后,发送大于100个字节的内容,按理说服务器监听的这个套接口设为边缘触发之后,应该只会读取...

学习epoll模型的时候,我的服务器端设置为边缘触发,然后每次epoll_wait之后只接收100字节的内容。
客户端连接server之后,发送大于100个字节的内容,按理说服务器监听的这个套接口设为边缘触发之后,应该只会读取一次的,但是实际情况确实把客户端发的东西多次读取出来了。
也就时,我设置为了边缘触发,但是服务器端只读取客户端发来的部分内容,再次epoll_wait还是返回了这个套接字。
下面的server的代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MAX_FD 10
int getPortFromParam(int argc, char *argv[]);
int main(int argc, char *argv[])
{
int port = getPortFromParam(argc, argv);
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in socksrv;
bzero(&socksrv, sizeof(socksrv));
socksrv.sin_addr.s_addr = htonl(INADDR_ANY);
socksrv.sin_family = AF_INET;
socksrv.sin_port = htons(port);
int result = bind(listenfd, (struct sockaddr*)&socksrv, sizeof(socksrv));
if(result == -1) {
perror("bind error!");
exit(1);
}
result = listen(listenfd, 10);
if(result == -1) {
perror("listen error1");
exit(1);
}

struct epoll_event ev, events[MAX_FD];
int kdpfd = epoll_create(MAX_FD);
ev.events = EPOLLIN;
ev.data.fd = listenfd;
epoll_ctl(kdpfd, EPOLL_CTL_ADD, listenfd, &ev);
while(1) {
int nfds = epoll_wait(kdpfd, events,MAX_FD, -1);
if(nfds == -1) {
perror("eait error.");
printf("%d n", errno);
exit(1);
}
int i;
for(i = 0; i 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Ubuntu 12.04长期支持版和最新版Ubuntu 13.10下载
  • vmware里装了Ubuntu后Ubuntu.vmdk文件大小和Ubuntu系统大小区别?
  • Ubuntu查看系统信息命令介绍
  • win7与Ubuntu双系统卸载ubuntu
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 装ubuntu的时候选安装ubuntu与win7共存与选其他选项
  • Ubuntu查看硬盘,分区相关命令介绍
  • winxp+ubuntu32+ubuntu64是否可以这样装系统?
  • Ubuntu系统安装及升级命令
  • ubuntu能安装rpm包吗&&ubuntu的intel 945显卡驱动
  • Ubuntu Precise 12.04 (LTS) (64-bit)下面安装docker
  • 在win7下装ubuntu成功后进不去ubuntu!!??
  • Ubuntu Raring 13.04 和 Saucy 13.10 (64 bit)下面安装docker
  • 原来已安装好ubuntu,因系统崩溃,重装WINXP系统,如何再次登录ubuntu系统?
  • Ubuntu Trusty 14.04 (LTS) 下面安装docker及依赖关系检查
  • ubuntu10.10 和 ubuntu 10.04.1
  • Ubuntu Vivid 15.04 下面安装docker的详细步骤
  • Ubuntu 中的 ubuntu one 算不算的上云?
  • ubuntu系统中软件安装、卸载以及查询是否已经安装某个软件包的方法
  • 安装ubuntu11.04时,过了ubuntu的logo花屏,怎么解决
  • Ubuntu查看内存,进程相关命令介绍
  • 我想根据ubuntu官网上介绍的方法安装ubuntu,是否应该先分一块硬盘空间?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,