当前位置: 技术问答>linux和unix
关于socket的读写
来源: 互联网 发布时间:2015-08-04
本文导语: 用recv和write 它们的返回值的处理。 它们的返回值不管非阻塞还是阻塞的,如果是0。那么我们一定是close(socket)的。 现在主要是=-1的情况。 这里我们要判断errno的值。 看《unix网络编程》上面当为E_WOULDBLOCK时,不做处...
用recv和write
它们的返回值的处理。
它们的返回值不管非阻塞还是阻塞的,如果是0。那么我们一定是close(socket)的。
现在主要是=-1的情况。
这里我们要判断errno的值。
看《unix网络编程》上面当为E_WOULDBLOCK时,不做处理。(在非阻塞下)。
又看了好多程序是是当为E_ENTER时,也是不做处理(主要看的是在阻塞下)。
然后帮助上又有E_AGAIN,是说在非阻塞下出现阻塞或超时发生的错误。但是该怎么处理。是关闭还是不做处理呢。
errno还有好多错误。那时我们该怎么处理。是关闭还是不做处理呢。
当然。还有捕捉信号的错误。
总之。感觉没有一个资料把阻塞和非阻塞情况下这些返回值的处理详细的说明。
它们的返回值的处理。
它们的返回值不管非阻塞还是阻塞的,如果是0。那么我们一定是close(socket)的。
现在主要是=-1的情况。
这里我们要判断errno的值。
看《unix网络编程》上面当为E_WOULDBLOCK时,不做处理。(在非阻塞下)。
又看了好多程序是是当为E_ENTER时,也是不做处理(主要看的是在阻塞下)。
然后帮助上又有E_AGAIN,是说在非阻塞下出现阻塞或超时发生的错误。但是该怎么处理。是关闭还是不做处理呢。
errno还有好多错误。那时我们该怎么处理。是关闭还是不做处理呢。
当然。还有捕捉信号的错误。
总之。感觉没有一个资料把阻塞和非阻塞情况下这些返回值的处理详细的说明。
|
如何处理当然根据你的需要了,你是说无法判断是什么原因造成的吧?
这个不太好说,比如我开50个连接,那些连接断开了,还是网络有问题,还是其他原因?我需要
断开其中的一些连接,我就会用一个计时器,因为我无法判断他们是因为什么原因没有连接,当我遍历的时候我就会判断是否超过设定的时间,没有数据的交互,我就断开。
这个不太好说,比如我开50个连接,那些连接断开了,还是网络有问题,还是其他原因?我需要
断开其中的一些连接,我就会用一个计时器,因为我无法判断他们是因为什么原因没有连接,当我遍历的时候我就会判断是否超过设定的时间,没有数据的交互,我就断开。
|
当不同的系统出现不同的错误信息时,是否处理,如何处理也不同.
1,忽略, 2,默认, 3,关闭
1,忽略, 2,默认, 3,关闭
|
如果对底层socket把握不清的话,还是用封装好的东西吧,方便快捷高效,比如:ACE