static int luasocket_new1(lua_State *L){ luaRef_t obj = toluaRef(L,1); int domain = lua_tointeger(L,2); int type = lua_tointeger(L,3); luasocket_t luasock; handle_t sock; if(type == SOCK_STREAM){ sock = kn_new_sock(domain,type,IPPROTO_TCP); if(!sock){ lua_pushnil(L); return 1; } luasock = calloc(1,sizeof(*luasock)); luasock->type = _SOCKET; kn_sock_setud(sock,luasock); }else if(type == SOCK_DGRAM){ uint32_t recvbuf_size = lua_tointeger(L,4); decoder* _decoder = (decoder*)lua_touserdata(L,5); luasock = calloc(1,sizeof(*luasock)); luasock->datagram = new_datagram(domain,recvbuf_size,_decoder); luasock->type = _DATAGRAM; sock = datagram_gethandle(luasock->datagram); datagram_setud(luasock->datagram,luasock,destroy_luasocket); datagram_associate(g_engine,luasock->datagram,on_datagram); }else{ lua_pushnil(L); return 1; } luasock->sock = sock; luasock->luaObj = obj; lua_pushlightuserdata(L,luasock); return 1; }
int main(int argc,char **argv){ signal(SIGPIPE,SIG_IGN); engine_t p = kn_new_engine(); kn_sockaddr local; kn_addr_init_in(&local,argv[1],atoi(argv[2])); handle_t l = kn_new_sock(AF_INET,SOCK_STREAM,IPPROTO_TCP); kn_sock_listen(p,l,&local,on_accept,p); kn_reg_timer(p,1000,timer_callback,NULL); kn_engine_run(p); return 0; }
int main(int argc,char **argv){ signal(SIGPIPE,SIG_IGN); //create ioworker and logicprocessor logicprocessor_t logic = create_logic(on_new_connection,on_packet,on_disconnected); _worker = ioworker_new(logic); //run net worker thread ioworker_startrun(_worker); //run logic process thread logic_startrun(logic); //start listen engine_t p = kn_new_engine(); kn_sockaddr local; kn_addr_init_in(&local,argv[1],atoi(argv[2])); handle_t l = kn_new_sock(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(0 == kn_sock_listen(l,&local)){ kn_engine_associate(p,l,on_accept); kn_engine_run(p); } return 0; }