我是靠谱客的博主 眼睛大大叔,最近开发中收集的这篇文章主要介绍linux socket 错误处理,Linux - socket编程处理EINTR错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在linux的socket编程中,经常要处理EINTR错误,其值为4,用strerror(errno)调用返回的错误描述为:Interrupted

system call. 这里给出一个connect连接中对EINTR处理的网址:

另外转载网络上其他兄弟对EINTR错误的处理:

1.

accetp()是慢系统调用,在信号产生时会中断其调用并将errno变量设置为EINTR,此时应重新调用accept()。所以使用时应这样:(网址:)

while(1)

{

if ((connfd = accept(....)) == -1)

{

if (errno == EINTR)

{

continue;

}

perror("accept()");

exit(1);

}

//do something with the connfd

......;

}

2. 引用网址 ,其中摘引一段socket的读处理,我把排版做了相应改动:

int my_read(int fd,

void *buffer, int length)

{

int bytes_left;

int bytes_read;

char *ptr = NULL;

bytes_left = length;

while (bytes_left > 0)

{

bytes_read = read(fd, ptr, bytes_read);

if (bytes_read < 0)

{

if (errno == EINTR)

{

bytes_read = 0;

}

else

{

return(-1);

}

}

else if (0 == bytes_read)

{

break;

}

bytes_left -= bytes_read;

ptr += bytes_read;

}

return(length-bytes_left);

}

这个只能针对阻塞模式的socket,非阻塞模式的socket好要处理EAGAIN错误。

摘自 http://blog.sina.com.cn/s/blog_5acb430f0100aer1.html

最后

以上就是眼睛大大叔为你收集整理的linux socket 错误处理,Linux - socket编程处理EINTR错误的全部内容,希望文章能够帮你解决linux socket 错误处理,Linux - socket编程处理EINTR错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部