BOOLEAN HttpcOpen(PCHAR pServerIP) { _pHttpcTcb = TcpOpen(pServerIP, GetProvPort(), 0, HTTP_BANK_OFFSET, (USHORT)HttpcRun); if (_pHttpcTcb) { TcpSetTimeout(_pHttpcTcb, HTTP_ACTIVE_TIMEOUT); return TRUE; } else { UdpDebugString("Can't open Prov TCP"); return FALSE; } }
void *tcp_rcvTask(void *argc) { int ret, i; int numEvents; unsigned char buf[MAX_DATA_LENGTH*1000]; /* NEXT_CHECK by icecom 110823 */ ThreadAlive[PTASK0] = TRUE; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_cleanup_push(ThreadCleanUp, (void *)NULL); memset(buf, 0x0, sizeof(buf)); FD_ZERO(&allset); tlink.ListenFD = TcpOpen(&tlink); if (tlink.ListenFD <= 0) { if (tlink.mode == LINK_MODE_SERVER) { xprint(FMS_HST | FMS_ERROR, "%s : S-TCP TcpOpen failed\n", __func__); } else if (tlink.mode == LINK_MODE_CLIENT) { xprint(FMS_HST | FMS_ERROR, "%s : client mode\n", __func__); } else { xprint(FMS_HST | FMS_ERROR, "%s : unknown socket mode\n", __func__); } /* NEXT_CHECK error processing, by icecom */ } else { FD_SET(tlink.ListenFD, &allset); compareMaxfd(tlink.ListenFD); if (tlink.mode == LINK_MODE_CLIENT) { } else { TcpInfo(); } } for (;;) { if (ThreadAlive[PTASK0] != TRUE) { break; } rset = allset; if (0 > (numEvents = recv_extendedPoll(200, &rset))) { xprint(FMS_HST | FMS_ERROR, "%s(%d) : recv_extendedPoll (reason=%s)\n", __func__, __LINE__, strerror(errno)); if (errno == EINTR) { continue; } else if (errno == EBADF || errno == EPIPE || errno == EIO) { xprint(FMS_HST | FMS_ERROR, "select at ProcessEvent(%s) EXIT !!\n", strerror(errno)); } else { xprint(FMS_HST | FMS_ERROR, "select at ProcessEvent(%s) EXIT !!\n", strerror(errno)); } } else if (numEvents == 0) { /* Time out 인 경우 정상처리 한다. */ continue; } else { if (tlink.mode == LINK_MODE_SERVER) { if (tlink.ListenFD > 0) { if (FD_ISSET(tlink.ListenFD, &rset)) { xprint(FMS_HST | FMS_INFO1, "%s(%d) :: TcpAccept Start\n", __func__, __LINE__); pthread_mutex_lock(&TcpMutex); i = TcpAccept(tlink.ListenFD); pthread_mutex_unlock(&TcpMutex); if (i == MAX_LISTENQ) { xprint(FMS_HST | FMS_ERROR, "%s(%d) :: TcpAccept error\n", __func__, __LINE__); continue; } else { pthread_mutex_lock(&TcpMutex); if (alist[i].AcceptFD > 0) { FD_SET(alist[i].AcceptFD, &allset); compareMaxfd(alist[i].AcceptFD); #if 0 /* 20140723, by jeon */ TcpInfo(); #endif } else { xprint(FMS_HST | FMS_ERROR, "TcpAccept fail(fd=%d)\n", alist[i].AcceptFD); pthread_mutex_unlock(&TcpMutex); continue; } pthread_mutex_unlock(&TcpMutex); } } } pthread_mutex_lock(&TcpMutex); for (i = 0; i < MAX_LISTENQ; i++) { if (alist[i].AcceptFD > 0) { if (FD_ISSET(alist[i].AcceptFD, &rset)) { if ((ret = TcpRecv(i, alist[i].AcceptFD, buf)) > 0) { /* 20140723, by jeon */ if (hostConf.vmc_system[i].systemport == 0) { vm_proc_state_msg *hb = (vm_proc_state_msg *)&buf[DEFAULT_TCP_COMHDR_LENGTH]; alist[i].sysinfo.systemaddr = NBO_NTOHL(hb->vm_ipaddress); sprintf(alist[i].sysinfo.systemname, "VM-%s", addr2ntoa(alist[i].sysinfo.systemaddr)); hostConf.vmc_system[i].systemaddr = alist[i].sysinfo.systemaddr; sprintf(hostConf.vmc_system[i].systemname, "%s", alist[i].sysinfo.systemname); hostConf.vmc_system[i].systemport = alist[i].sysinfo.port; TcpInfo(); } TcpdSock_Event(i, buf); } } } } pthread_mutex_unlock(&TcpMutex); } else if (tlink.mode == LINK_MODE_CLIENT) { } } } ThreadAlive[PTASK0] = FALSE; ThreadFlags[PTASK0] = FALSE; /* pthread mgnt */ pthread_cleanup_pop(1); return(NULL); }