epoll模型学习问题:客户端一直保持发送动作,服务器重启后epoll_wait返回0

tonforce 2015-07-30 04:03:28
各位大牛:

最近在学习epoll模型, 在网络上下载了这个资料:http://www.360doc.com/content/14/0527/19/16926569_381518275.shtml,
用一工具模拟客户端发送数据,如果服务器端先启动,客户端后启动所发送的数据能收到。但如果模拟客户端一直发送数据,服务端重启,然后运行程序,那么在AcceptThread(void *arg)函数的for循环会陷入死循环,貌似nfds = epoll_wait(epfd, events, MAXEVENTS, 500);的epoll_wait的结果为0.

开发环境:虚拟机安装ubuntu 14.04 , g++
模拟客户端:win7 , tcp工具


求大牛解惑。
...全文
306 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonforce 2015-07-31
  • 打赏
  • 举报
回复
引用 5 楼 jiqiang01234 的回复:
楼主似乎没太理解tcp的中“面向连接”的含义。如果服务端没有启动,那么客户端与服务端就没有建立“连接”。此时就算服务端启动了,如果客户端没有调用connect()函数,依然是无法与服务端建立连接的。客户端无论怎么发数据都没用,服务端是收不到数据的。
谢谢您的指教!
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
楼主似乎没太理解tcp的中“面向连接”的含义。如果服务端没有启动,那么客户端与服务端就没有建立“连接”。此时就算服务端启动了,如果客户端没有调用connect()函数,依然是无法与服务端建立连接的。客户端无论怎么发数据都没用,服务端是收不到数据的。
飞翔的薄荷 2015-07-30
  • 打赏
  • 举报
回复
epoll_wait 超时时间到了,就返回0。
tonforce 2015-07-30
  • 打赏
  • 举报
回复
现在有两个问题不明确,明天针对这两个问题查找些资料: 1. 在接收连接线程里AcceptThread,如果epoll_wait() 返回0,该怎么处理?一直陷入循环? 2. 在数据读取线程里ReadThread,读取不到数据该怎么处理?直接break出去?
tonforce 2015-07-30
  • 打赏
  • 举报
回复
引用 1 楼 jiqiang01234 的回复:
是tcp通讯吗?服务端都没启动,客户端还能通过tcp发数据?你确定?
谢谢您的回复!! 是tcp, 我的理解是:服务端虽然没启动,但是客户端可以在一直发送,至于有没有送出去可以不管了; 比如某应用:有n多个客户端把监测数据自动发送到服务器,不管服务器程序有没有启动,客户端一直在发。如果某时刻服务器宕机或者重启了,然后再重启服务程序,此时接收不到程序的话就不正常了。
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
是tcp通讯吗?服务端都没启动,客户端还能通过tcp发数据?你确定?

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧