|
开发环境: linux2.6.21, gcc3.4.5
开发语言:C++
在调用Socket接口(比如connect,recv,select等)的时候,总莫名其妙的被信号中断(通过返回值以及errno判断的,即返回值为-1,errno为4)。经过反复调试,最后查出是由于定时器造成的,但不明白为什么会与定时器使用有关。
定时器使用大致如下:
#define SIGMYTIMER (SIGRTMAX)
void TestCLass::InitializeTimer()
{
struct sigaction sysact;
sigemptyset(&sysact.sa_mask);
sysact.sa_flags=SA_SIGINFO | SA_RESTART;
sysact.sa_sigaction=TimerRoutine ;
sigaction(SIGMYTIMER,&sysact,NULL);
struct sigevent evp;
evp.sigev_notify = SIGEV_SIGNAL;
evp.sigev_signo = SIGMYTIMER;
evp.sigev_value.sival_ptr = this;
int nCreate = timer_create(CLOCK_REALTIME,&evp,&m_TimerID);
struct itimerspec value;
struct itimerspec ovalue;
value.it_value.tv_sec = 0;
value.it_value.tv_nsec = 10 * (1000 * 1000);
value.it_interval.tv_sec = value.it_value.tv_sec;
value.it_interval.tv_nsec = value.it_value.tv_nsec;
timer_settime(m_TimerID,0,&value,&ovalue);
......
return true;
}
当我把上述代码注释之后,再调用Socket的接口时就一切正常。
不知道大家遇到类似的问题没有?如何解决的呢?
用setitimer(ITIMER_REAL,...)也可以使用定时器功能,但那样又与usleep等函数冲突。遇到过类似问题的大虾指点一下!
thanks |
|