关于判断server的socket关闭的问题

昵称怎么改都存在 2005-05-10 04:22:32
client端是用阻塞式监听stdin和远端的socket的,我听说当server关闭socket时client的远端socket会变为可读,可是recv()的内容不可知,我试过用if(recv()==-1)判断,当server关闭连接后client还是分辨是关闭信令还是新信息,请教高手应该如何解决?
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢过眼云烟!我用这个条件终于可以判别了
也谢谢秋风萧萧。想再问一下,fgets()不可对stdin操作吧,如果是获取标准输入的话应该如何使用?
think__ 2005-05-10
  • 打赏
  • 举报
回复
recv() 返回 0,表示对方已关闭tcp连接。在实际使用中,对端关闭,也可能返回-1, errno错误值为连接连接reset等。

因此,recv() <= 0,一般可用来表示连接已关闭
qfxx 2005-05-10
  • 打赏
  • 举报
回复
gets会存在缓冲区溢出的问题
可用fgets代替
qfxx 2005-05-10
  • 打赏
  • 举报
回复
以前也有讨论过这个问题
但是没有很好的答案
多用超时或异常来处理
http://community.csdn.net/Expert/topic/3659/3659348.xml?temp=.3845178
  • 打赏
  • 举报
回复
写错了,应该是:
当server关闭连接后client还是(无法)分辨是关闭信令还是新信息
  • 打赏
  • 举报
回复
还有一个小问题,我用gets()函数获取字符串,linux下warning说gets()是dangerous的,请问需要理会吗?尽管我得程序没有错,可是好像不太好,请问有何对策?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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