Exemple #1
0
void TCPConnection::ThreadListen(void* arg)
{
	//printf("ThreadListe\n");
	TCPConnection *MyClass = static_cast<TCPConnection*>(arg);

	while(MyClass->mRunningListenFlag)
	{
		fd_set rfd; // read event
		fd_set efd; // accept event
		int retVal, nfds = 0;
		timeval tv = { 0 };
		tv.tv_usec = 1;


		FD_ZERO(&rfd);
		FD_ZERO(&efd);

		FD_SET(MyClass->mSocketListener, &rfd);
		nfds = nfds > MyClass->mSocketListener ? nfds : MyClass->mSocketListener;
		FD_SET(MyClass->mSocketListener, &efd);
		nfds = nfds > MyClass->mSocketListener ? nfds : MyClass->mSocketListener;

		retVal = select(nfds + 1, &rfd, NULL, & efd, &tv);

		if (retVal == -1 && errno == EINTR)
			return ;

		if (FD_ISSET(MyClass->mSocketListener, &efd))
		{
			char c;
			retVal = recv(MyClass->mSocketListener, &c, 1, MSG_OOB);
		}

		if (FD_ISSET(MyClass->mSocketListener, &rfd))
		{
			//if(MyClass->mSocketPc == -1)
				MyClass->OnAccept(MyClass->mSocketListener);
			//else
				//printf("Reject connection from PC !!!!\n");

		}

	}
}