Ejemplo n.º 1
0
/*********************************************************************************************************
** 函数名称: 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);
	}
}
Ejemplo n.º 2
0
Archivo: libicq.c Proyecto: ayttm/ayttm
/* !@# 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);
	}
}