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; }
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; }