[C语言]检测socket连接状态

夕若只如初见 2016-04-17 05:56:49
编写一个socket http代理,想实现一个socket连接表,思路是当接收到连接请求时从请求报文中解析远程主机和端口,然后进行sock连接,成功时保存到连接表方便下次调用, 但却不知如何实时检测socket的连接状态
...全文
623 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
夕若只如初见 2016-04-21
  • 打赏
  • 举报
回复
引用 3 楼 赵4老师的回复:
为什么不
WinExec("cmd /c netstat -na >netstat.txt",SW_HIDE);
//然后读文件netstat.txt的内容
呢?
你跑题了吧,我问的是socket
夕若只如初见 2016-04-19
  • 打赏
  • 举报
回复
引用 1 楼 小灸舞的回复:
对端正常close socket,或者进程退出(正常退出或崩溃),对端系统正常关闭 这种情况下,协议栈会走正常的关闭状态转移,使用epoll的话,一般要判断如下几个情况 处理可读事件时,在循环read后,返回结果为0 处理可写事件时,write返回-1,errno为EPIPE EPOLLERR或EPOLLHUP或事件 对端非正常断开,比如服务器断电,网线被拔掉 这种情况下,协议栈无法感知,SO_KEEPALIVE这个选项的超时事件太长并不实用,一般还是以应用层的heartbeat来及时发现
那样太费时间了吧,有没有更直接简单的,比如tcp_info结构
赵4老师 2016-04-19
  • 打赏
  • 举报
回复
为什么不
WinExec("cmd /c netstat -na >netstat.txt",SW_HIDE);
//然后读文件netstat.txt的内容
呢?
小灸舞 版主 2016-04-17
  • 打赏
  • 举报
回复
对端正常close socket,或者进程退出(正常退出或崩溃),对端系统正常关闭 这种情况下,协议栈会走正常的关闭状态转移,使用epoll的话,一般要判断如下几个情况 处理可读事件时,在循环read后,返回结果为0 处理可写事件时,write返回-1,errno为EPIPE EPOLLERR或EPOLLHUP或事件 对端非正常断开,比如服务器断电,网线被拔掉 这种情况下,协议栈无法感知,SO_KEEPALIVE这个选项的超时事件太长并不实用,一般还是以应用层的heartbeat来及时发现

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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