示例#1
0
main ()
{
SOCKET LSock, CSock;
unsigned short usPort=80;
int Rc;
char szVer [128];

  Tcp4uVer (szVer, sizeof szVer);
  printf ("Using %s\n", szVer);

  /* --- prepare a listening connection */
  Tcp4uInit ();
  Rc = TcpGetListenSocket (& LSock, "http", & usPort, 1);
  if (Rc!=TCP4U_SUCCESS)
  {
     printf ("%s\n", Tcp4uErrorString(Rc));
     return 0;
  }
  /* --- now listen at port */
  Rc = TcpAccept (&CSock, LSock, 0);
  while (Rc>=TCP4U_SUCCESS)
  {
    /* now the application code. Note that you can fork or creat */
    /* a new thread in order to create a multi-user server       */
    /* --- in this app, we listen at the opened socket */
    Rc = TnReadLine (CSock, szBuf, sizeof szBuf, 60, HFILE_ERROR);
    if (Rc>=TCP4U_SUCCESS)  printf ("%s\n", szBuf);
  }
  TcpClose (& CSock);
  Tcp4uCleanup ();
return 0;
}  /* main */   
bool TestTcpSendBlocking( )
{
	Socket hListen = TcpListen( LISTEN_PORT, 255, "127.0.0.1" );
	if( hListen == INVALID_SOCKET )
	{
		CLog::Print( LOG_ERROR, "TcpListen() error" );
		return false;
	}

	CTcpClientThreadArg * pclsArg = new CTcpClientThreadArg();
	pclsArg->m_bRun = true;

	StartThread( "TcpClientThread", TcpClientThread, pclsArg );

	char szIp[52];
	int iPort;

	Socket hConn = TcpAccept( hListen, szIp, sizeof(szIp), &iPort );

	while( pclsArg->m_bRun )
	{
		sleep(1);
	}

	closesocket( hConn );

	delete pclsArg;

	return true;
}
示例#3
0
/**
 * @ingroup ServerPlatform
 * @brief SipLoadBalancer 관리를 위한 네트워크 서버 쓰레드 함수
 * @param lpParameter 의미없음
 * @returns 0 을 리턴한다.
 */
THREAD_API ServerThread( LPVOID lpParameter )
{
	IMonitorCallBack * pclsCallBack = (IMonitorCallBack *)lpParameter;
	Socket hMonitorSocket;
	pollfd sttPoll[1];
	char	szIp[INET6_ADDRSTRLEN];
	int		iPort, n;
	std::string	strIp;

	hMonitorSocket = TcpListen( pclsCallBack->m_iMonitorPort, 255, NULL, pclsCallBack->m_bIpv6 );
	if( hMonitorSocket == INVALID_SOCKET )
	{
		CLog::Print( LOG_ERROR, "Monitor Tcp Server Port(%d) open error(%d)", pclsCallBack->m_iMonitorPort, GetError() );
	}
	else
	{
		sttPoll[0].fd = hMonitorSocket;
		sttPoll[0].events = POLLIN;
		sttPoll[0].revents = 0;
	}

	CLog::Print( LOG_INFO, "MonitorServerThread is started" );

	while( gbStop == false )
	{
		n = poll( sttPoll, 1, 1000 );
		if( n <= 0 )
		{
			continue;
		}

		Socket hClientSocket = TcpAccept( hMonitorSocket, szIp, sizeof(szIp), &iPort );
		if( hClientSocket == INVALID_SOCKET )
		{

		}
		else if( pclsCallBack->IsMonitorIp( szIp ) )
		{
			StartMonitorThread( hClientSocket, szIp, iPort, pclsCallBack );
		}
		else
		{
			if( strcmp( strIp.c_str(), szIp ) )
			{
				CLog::Print( LOG_ERROR, "monitor client(%s:%d) is disconnected because it's ip is not monitor ip", szIp, iPort );
				strIp = szIp;
			}

			closesocket( hClientSocket );
		}
	}

	closesocket( hMonitorSocket );

	CLog::Print( LOG_INFO, "MonitorServerThread is terminated" );

	return 0;
}
/**
 * @ingroup SnmpStack
 * @brief SNMP 클라이언트의 TCP 연결 처리 쓰레드
 * @param lpParameter CSnmpTcpAgent 객체
 * @returns 0 을 리턴한다.
 */
THREAD_API SnmpTcpAgentListenThread( LPVOID lpParameter )
{
	CSnmpTcpAgent * pclsAgent = (CSnmpTcpAgent *)lpParameter;
	pollfd sttPoll[1];
	char	szIp[52];
	int		iPort, n;

	TcpSetPollIn( sttPoll[0], pclsAgent->m_hSocket );

	CLog::Print( LOG_INFO, "SnmpTcpAgentListenThread is started" );

	while( pclsAgent->m_bStop == false )
	{
		n = poll( sttPoll, 1, 1000 );
		if( n <= 0 ) continue;
		if( pclsAgent->m_bStop ) break;

		Socket hSocket = TcpAccept( pclsAgent->m_hSocket, szIp, sizeof(szIp), &iPort );
		if( hSocket != INVALID_SOCKET )
		{
			CSnmpTcpAgentClientArg * pclsArg = new CSnmpTcpAgentClientArg();
			if( pclsArg == NULL )
			{
				CLog::Print( LOG_ERROR, "%s new error(%d)", __FUNCTION__, GetError() );
				closesocket( hSocket );
			}
			else
			{
				pclsArg->m_pclsAgent = pclsAgent;
				pclsArg->m_hSocket = hSocket;
				pclsArg->m_strIp = szIp;
				pclsArg->m_iPort = iPort;

				if( StartThread( "SnmpTcpAgentClientThread", SnmpTcpAgentClientThread, pclsArg ) == false )
				{
					closesocket( hSocket );
					delete pclsArg;

					CLog::Print( LOG_ERROR, "%s SnmpTcpAgentClientThread thread start error(%d)", __FUNCTION__, GetError() );
				}
			}
		}
	}

	closesocket( pclsAgent->m_hSocket );

	CLog::Print( LOG_INFO, "SnmpTcpAgentListenThread is terminated" );

	return 0;
}
示例#5
0
int main()
{
  int sockfd, rc;
  int port = 9997;
  sockfd = TcpListenX("127.0.0.1", port);
  printf("sockfd:%d\n", sockfd);
  int sport;
  char buf[1025]; 
  char sip[100]; 
  while(1) {
    rc = TcpAccept(sockfd, sip, &sport);
    printf("rc : %d\n", rc);
    printf("sip:%s, sport:%d\n", sip, sport);
    int sx = 0;
    rc = TcpRecv(rc, buf, 1024, sx);
  } 
  return 0;
}
示例#6
0
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);
}