static int start_listen(struct gate *g, char * listen_addr) { struct skynet_context * ctx = g->ctx; char * portstr = strchr(listen_addr,':'); const char * host = ""; int port; if (portstr == NULL) { port = strtol(listen_addr, NULL, 10); if (port <= 0) { skynet_error(ctx, "Invalid gate address %s",listen_addr); return 1; } } else { port = strtol(portstr + 1, NULL, 10); if (port <= 0) { skynet_error(ctx, "Invalid gate address %s",listen_addr); return 1; } portstr[0] = '\0'; host = listen_addr; } g->listen_id = skynet_socket_listen(ctx, host, port, BACKLOG); if (g->listen_id < 0) { return 1; } skynet_socket_start(ctx, g->listen_id); return 0; }
static int llisten(lua_State *L) { const char * host = luaL_checkstring(L,1); int port = luaL_checkinteger(L,2); int backlog = luaL_optinteger(L,3,BACKLOG); struct skynet_context * ctx = lua_touserdata(L, lua_upvalueindex(1)); int id = skynet_socket_listen(ctx, host,port,backlog); if (id < 0) { return luaL_error(L, "Listen error"); } lua_pushinteger(L,id); return 1; }