PUBLIC void httpSetupWaitHandler(HttpConn *conn, int eventMask) { MprSocket *sp; sp = conn->sock; if (eventMask) { if (sp->handler == 0) { mprAddSocketHandler(sp, eventMask, conn->dispatcher, conn->ioCallback, conn, 0); } else { mprSetSocketDispatcher(sp, conn->dispatcher); mprEnableSocketEvents(sp, eventMask); } } else if (sp->handler) { mprWaitOn(sp->handler, eventMask); } }
int httpStartEndpoint(HttpEndpoint *endpoint) { HttpHost *host; cchar *proto, *ip; int next; if (!validateEndpoint(endpoint)) { return MPR_ERR_BAD_ARGS; } for (ITERATE_ITEMS(endpoint->hosts, host, next)) { httpStartHost(host); } if ((endpoint->sock = mprCreateSocket(endpoint->ssl)) == 0) { return MPR_ERR_MEMORY; } if (mprListenOnSocket(endpoint->sock, endpoint->ip, endpoint->port, MPR_SOCKET_NODELAY | MPR_SOCKET_THREAD) < 0) { mprError("Can't open a socket on %s:%d", *endpoint->ip ? endpoint->ip : "*", endpoint->port); return MPR_ERR_CANT_OPEN; } if (endpoint->http->listenCallback && (endpoint->http->listenCallback)(endpoint) < 0) { return MPR_ERR_CANT_OPEN; } if (endpoint->async && !endpoint->sock->handler) { mprAddSocketHandler(endpoint->sock, MPR_SOCKET_READABLE, endpoint->dispatcher, httpAcceptConn, endpoint, (endpoint->dispatcher) ? 0 : MPR_WAIT_NEW_DISPATCHER); } else { mprSetSocketBlockingMode(endpoint->sock, 1); } proto = endpoint->ssl ? "HTTPS" : "HTTP "; ip = *endpoint->ip ? endpoint->ip : "*"; if (mprIsSocketV6(endpoint->sock)) { mprLog(2, "Started %s service on \"[%s]:%d\"", proto, ip, endpoint->port); } else { mprLog(2, "Started %s service on \"%s:%d\"", proto, ip, endpoint->port); } return 0; }