当前位置: 技术问答>linux和unix
在多线程程序中如何进行超时的判断处理?
来源: 互联网 发布时间:2015-04-07
本文导语: 我编写的一个基于IBM AIX的使用SOCKET进行通讯传输的服务端的处理程序,当客户端有通讯连接请求时,就使用FORK()派生出一个子进程,读取客户端的发送的数据,但是如果遇到网络连接不好时,客户端连接成功后,当...
我编写的一个基于IBM AIX的使用SOCKET进行通讯传输的服务端的处理程序,当客户端有通讯连接请求时,就使用FORK()派生出一个子进程,读取客户端的发送的数据,但是如果遇到网络连接不好时,客户端连接成功后,当要发送数据时网络不通了,客户端的SEND()也并没有返回失败值,这样服务器端的子进程一直处于等待接收数据状态,如果这种情况经常出现,我使用PS -EF|GREP 进程名 的方法查看时,会看到有好几个ID的同名进程在运行。这时客户端如果再有连接请求的话,虽然它仍在运行,但是已经不工作了。我是想如果服务端在服务端程序的子进程中加入一个超时的判断处理,如果某一时间内没有读到客户端发送的信息,自动调用结束子进程的命令,不知这个延时处理该如何编写,还请高手指教了,多谢多谢。
|
用select来实现,给你一个例子看看吧
int TimeWait(int fd, int Mode)
{
fd_set rset;
bool flag = true;
struct timeval timewait;
FD_ZERO(&rset);
FD_SET(fd, &rset);
timewait.tv_sec = SOCK_TIME_OUT;
timewait.tv_usec = 0;
while(flag)
{
if(MODE_WRITE == Mode)
{
if(select(fd+1, NULL, &rset, NULL, &timewait)
int TimeWait(int fd, int Mode)
{
fd_set rset;
bool flag = true;
struct timeval timewait;
FD_ZERO(&rset);
FD_SET(fd, &rset);
timewait.tv_sec = SOCK_TIME_OUT;
timewait.tv_usec = 0;
while(flag)
{
if(MODE_WRITE == Mode)
{
if(select(fd+1, NULL, &rset, NULL, &timewait)