int main(int argc,char **argv){ kn_net_open(); kn_proactor_t p = kn_new_proactor(); kn_sockaddr local; kn_fd_t l; kn_addr_init_in(&local,argv[1],atoi(argv[2])); l = kn_dgram_listen(p,SOCK_DGRAM,&local,transfer_finish); struct dgram_session *session = calloc(1,sizeof(*session)); session->s = l; kn_fd_setud(l,session); dgram_session_recv(session); uint64_t tick,now; tick = now = kn_systemms64(); while(1){ kn_proactor_run(p,50); now = kn_systemms64(); if(now - tick > 1000) { uint32_t elapse = (uint32_t)(now-tick); totalbytes = (totalbytes/elapse)/1024; printf("totalbytes:%lldMB/s\n",totalbytes); tick = now; totalbytes = 0; } } return 0; }
void on_accept(kn_fd_t s,void *ud){ printf("on_accept\n"); kn_proactor_t p = (kn_proactor_t)ud; struct session *session = calloc(1,sizeof(*session)); session->s = s; kn_fd_setud(s,session); kn_proactor_bind(p,s,transfer_finish); session_recv(session); ++client_count; }
void on_connect(kn_fd_t s,struct kn_sockaddr *remote,void *ud,int err) { kn_proactor_t p = (kn_proactor_t)ud; if(s){ printf("connect ok\n"); struct session *session = calloc(1,sizeof(*session)); session->s = s; kn_fd_setud(s,session); kn_proactor_bind(p,s,transfer_finish); session_send(session,send_size); }else{ printf("connect failed\n"); } }