当前位置: 技术问答>linux和unix
Linux select函数问题:调用close关闭socket时,select并不会退出等待
来源: 互联网 发布时间:2017-05-25
本文导语: 最近在编写Linux下 视频代理服务器时,碰到了一个很奇葩的问题,现在说出来希望能有个人帮我解答。 首先,环境是centOS系统,socket用的是select模式。阻塞和非阻塞、I/O复用不复用都会出现这个问题。 当socket进入sel...
最近在编写Linux下 视频代理服务器时,碰到了一个很奇葩的问题,现在说出来希望能有个人帮我解答。
首先,环境是centOS系统,socket用的是select模式。阻塞和非阻塞、I/O复用不复用都会出现这个问题。
当socket进入select时,另一个线程调用close关掉该socket,select不能退出等待并返回。
代码是从项目中抽出来并经过实验的,会出现这个问题没错。
代码如下:
首先,环境是centOS系统,socket用的是select模式。阻塞和非阻塞、I/O复用不复用都会出现这个问题。
当socket进入select时,另一个线程调用close关掉该socket,select不能退出等待并返回。
代码是从项目中抽出来并经过实验的,会出现这个问题没错。
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int proxysvr_sock;
//设置非阻塞
static int SetNonBlocking(int sock)
{
int opts;
opts=fcntl(sock, F_GETFL, 0);
if(opts