コード例 #1
0
ファイル: FiberListener.cpp プロジェクト: iYefeng/acl
void CFiberListener::run(void)
{
	printf("listener fiber run ...\r\n");
	acl_fiber_delay(1000);
	printf("wakeup now\r\n");

#if 0
	socket_t lfd = m_listener.sock_handle();
	int n = 0;
	while (true)
	{
		socket_t sock = acl_fiber_accept(lfd, NULL, NULL);
		if (sock == INVALID_SOCKET)
		{
			printf("accept error %s\r\n", acl::last_serror());
			break;
		}
		//printf("accept one connection, sock=%d, n=%d\r\n", sock, ++n);
		acl::socket_stream* conn = new acl::socket_stream;
		conn->open(sock);
		acl::fiber* fb = new CFiberClient(conn);
		fb->start();
	}

	acl_fiber_close(lfd);

	printf("listening stopped!\r\n");
#else
	while (true)
	{
		acl::socket_stream* conn = m_listener.accept();
		if (conn)
		{
			printf("accept one, fd=%u\r\n", conn->sock_handle());
			acl::fiber* fb = new CFiberClient(conn);
			fb->start();
		}
		else
		{
			printf("accept error=%s\r\n", acl::last_serror());
			break;
		}
	}
#endif

	delete this;
}
コード例 #2
0
ファイル: FiberConnect.cpp プロジェクト: zhengshuxin/acl
void CFiberConnect::run(void)
{
#if 0
	acl::string serverAddr(m_serverAddr);
	char *addr = serverAddr.c_str();
	char *port_s = strchr(addr, ':');

	ASSERT(port_s && *(port_s + 1));
	*port_s++ = 0;

	struct sockaddr_in sa;
	int len = sizeof(sa);
	memset(&sa, 0, sizeof(sa));
	sa.sin_family = AF_INET;
	sa.sin_port   = htons(atoi(port_s));
	sa.sin_addr.s_addr = inet_addr(addr);

	socket_t sock = acl_fiber_socket(AF_INET, SOCK_STREAM, 0);

	if (acl_fiber_connect(sock, (const struct sockaddr*) &sa, len) < 0)
		printf("connect %s error %s\r\n", m_serverAddr.c_str(),
			acl::last_serror());
	else
		doEcho(sock);

	acl_fiber_close(m_sock);
#else
	acl::socket_stream conn;
	if (conn.open(m_serverAddr, 10, 0) == false)
		printf("connect %s error %s\r\n", m_serverAddr.c_str(),
			acl::last_serror());
	else
		doEcho(conn);
#endif
	m_hWin.OnFiberConnectExit();
	delete this;
}