/********************************************************************************************************* ** 函数名称: TaskStart ** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务 ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 ** 调用模块: ** ** 作 者: 陈明计 ** 日 期: 2003年7月8日 **------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ void Task_Start(void *pdata) { /*在第1个任务中设置定时器0及中断*/ UBYTE iii; #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif ToggleWD(); pdata = pdata; /* 避免编译警告 */ Create_Mux_Box(); /* 创建任务需要的信号量*/ TargetInit(); /* 目标板初始化 */ System_Init(); TaskStart_CreateTasks(); /* start任务创建任务*/ SetNetPort(); InitNic(0); //RTL8019芯片初始化,在global.c中定义 Initial_arp(); Tcp_Initial(); Udp_Initial(); while(1) { OSTimeDly(4); do { iii=Rec_Packet(); } while(iii!=0); } }
/* !@# Check time since began login attempt !!! */ void ICQ_Check_Response(guint32 timeout) { struct timeval tv; fd_set readfds, writefds; int numfds; int optval; int optlen; int sock; Contact_Member *c; GList *curr; optlen = sizeof(int); numfds = ((sok > tcp_sok) ? sok : tcp_sok); tv.tv_sec = 0; tv.tv_usec = timeout; FD_ZERO(&readfds); FD_ZERO(&writefds); FD_SET(sok, &readfds); FD_SET(tcp_sok, &readfds); curr = g_list_first(open_sockets); while (curr) { sock = (int)(curr->data); curr = g_list_next(curr); FD_SET(sock, &readfds); FD_SET(sock, &writefds); if (sock > numfds) numfds = sock; } /* don't care about exceptfds: */ select(numfds + 1, &readfds, &writefds, NULL, &tv); if (FD_ISSET(sok, &readfds)) Rec_Packet(); if (FD_ISSET(tcp_sok, &readfds)) { fprintf(stderr, "ABOUT TO CALL TCP_ReadPacket\n"); TCP_ReadPacket(tcp_sok); } curr = g_list_first(open_sockets); while (curr) { sock = (int)(curr->data); c = contact_from_socket(sock); curr = g_list_next(curr); if (c) { if (sock == c->tcp_sok && FD_ISSET(sock, &writefds) && c->tcp_status == TCP_NOT_CONNECTED) { if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (char *)&optval, &optlen) < 0) optval = ERRNO; if (optval) { ICQ_Debug(ICQ_VERB_INFO, "TCP connection failed\n"); open_sockets = g_list_remove(open_sockets, (gpointer) sock); c->tcp_status |= TCP_FAILED; /* Connection failed */ c->tcp_sok = 0; UDP_SendMessages(c); break; } ICQ_Debug(ICQ_VERB_INFO, "TCP connection established\n"); c->tcp_status |= TCP_CONNECTED; TCP_SendHelloPacket(sock); TCP_SendMessages(c); continue; } if (sock == c->chat_sok && FD_ISSET(sock, &writefds) && c->chat_status == TCP_NOT_CONNECTED) { if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (char *)&optval, &optlen) < 0) optval = ERRNO; if (optval) { ICQ_Debug(ICQ_VERB_ERR, "TCP chat connection failed\n"); open_sockets = g_list_remove(open_sockets, (gpointer) sock); c->chat_status |= TCP_FAILED; /* Connection failed */ c->chat_sok = 0; break; } ICQ_Debug(ICQ_VERB_INFO, "TCP chat connection established\n"); c->chat_status |= TCP_SERVER; TCP_ChatServerHandshake(sock); continue; } if (sock == c->chat_sok && FD_ISSET(sock, &readfds)) { if (c->chat_status & TCP_CLIENT) if (c->chat_status & TCP_HANDSHAKE_WAIT) TCP_ChatClientHandshake(sock); else TCP_ChatReadClient(sock); else TCP_ChatReadServer(sock); continue; } } if (FD_ISSET(sock, &readfds)) TCP_ReadPacket(sock); } }