- 论坛徽章:
- 0
|
[quote]
挑挑错吧,说的不对的话,请见谅!
1, while ((cfd = accept(fd, (struct sockaddr *)&cin, &sin_len)) > 0)
可够改成
while(1)
cfd = accept(fd, (struct sockaddr *)&cin, &sin_len;
if(cfd>0)
..
2,你是要让客户端发送一次就不再发送了吗?
CODE:[Copy to clipboard] if(events[i].events & EPOLLIN)
{
cfd = events[ i ].data.fd;
ret = recv(cfd, buffer, sizeof(buffer),0);
//printf("read ret..........= %d\n",ret);
ev.data.fd = cfd;
ev.events = EPOLLOUT | EPOLLET;
epoll_ctl(epfd, EPOLL_CTL_MOD, cfd, &ev);
}
3,将accept事件列入epoll监控的对象
4,对close最好做一个判断
... [/quote]
1,如果描述符已经耗尽,这样判断cfd永远不会成立。所以就让它退出算了。
2,我只取http请求的头信息的第一行。 get /xxx http/1.0 做简单分析,其他的都不要了。按照tcp协议的特点,本应该多次读取的,但测试发现,只读一次就能得到我想要的,基本上没出过错。
里面的数据没读完就留那了,会不会对以后的请求造成什么不好的影响?
3,accept是在住线程里跑,加入了epoll有什么好处吗?
4,对close没做判断,这点确实是遗漏了。我得补上。
谢谢你的建议。
[[i] 本帖最后由 wyezl 于 2006-8-20 13:16 编辑 [/i]] |
|