怎么判断socket断了?

zhvfeng 2004-03-24 02:00:18
client和server连接成功后,在client发数据前,我将server断掉,然后client调用下面方法发送数据
totalSend = send(csocket->fd, (const void*)&n_length, sizeof(int), 0);
printf("totalSend %d\n", totalSend);
为什么打印出来的totalSend等于sizeof(int),连接已经断掉了,返回值应该小于0才对呀?
...全文
35 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhvfeng 2004-03-25
  • 打赏
  • 举报
回复
Thanks!
hongbo_liu 2004-03-24
  • 打赏
  • 举报
回复
可以通过信号捕捉到Broken Pipe的错误,然后在信号的处理函数里作你的事情,这样程序就不会退出。
如:
int iErrCount = 0;
void sigpipe(int sig){
if (iErrCount++ >= 10)
//报错,后续处理或者退出
//重新设置信号捕捉函数
signal(SIGPIPE,sigpipe);
return;
}
然后在程序调用SEND之前加上
signal(SIGPIPE,sigpipe);
如果你是在一个循环里调用SEND,则只需在最外层调用就可以了。
grooving 2004-03-24
  • 打赏
  • 举报
回复
if(csocket->fd == 0)
{
....
}
zhvfeng 2004-03-24
  • 打赏
  • 举报
回复
我只是想实现,当发送失败后,循环重新发送10次,如果还失败就退出.但现在是,发送失败后马上就推出了.然后控制台打印出Broken Pipe错误,我只是想知道能否捕到Broken Pipe错误?
gracian 2004-03-24
  • 打赏
  • 举报
回复
连上后第一次已经发出去了,以后再发就发现server断开报错.对你问题还是不很清楚
zhvfeng 2004-03-24
  • 打赏
  • 举报
回复
后续的发送会出现Broken Pipe错误,怎么能判断该错误并且从新建立连接.现在是调用后续send方法后,遇到Broken Pipe错误后,程序马上就自动推出了.send下面的语句都不执行了.

69,371

社区成员

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

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