void Acceptor::listen(std::string const& hostname, std::string const& port) { auto res = create_addr_info(hostname, port); ibv_qp_init_attr init_attr; memset(&init_attr, 0, sizeof(init_attr)); init_attr.cap.max_send_wr = m_credits; init_attr.cap.max_recv_wr = m_credits; init_attr.cap.max_send_sge = 1; init_attr.cap.max_recv_sge = 1; init_attr.cap.max_inline_data = 0; init_attr.sq_sig_all = 1; init_attr.qp_type = IBV_QPT_RC; int ret = rdma_create_ep(&m_cm_id, res, NULL, &init_attr); destroy_addr_info(res); if (ret) { rdma_destroy_ep(m_cm_id); throw exception::acceptor::generic_error( "Error on rdma_create_ep: " + std::string(strerror(errno))); } if (rdma_listen(m_cm_id, 128)) { rdma_destroy_ep(m_cm_id); throw exception::acceptor::generic_error( "Error on rdma_listen: " + std::string(strerror(errno))); } }
BOOL run_server_mode() { LPSTR instance_name = NULL; SOCKET local_socket = INVALID_SOCKET; SOCKADDR_BTH sock_addr_bth_local = { 0 }; LPCSADDR_INFO addr_info = NULL; BOOL ret = FALSE; char end; local_socket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); if (local_socket == INVALID_SOCKET) { print_error("socket()", WSAGetLastError()); return FALSE; } ret = bind_socket(local_socket, &sock_addr_bth_local); if (!ret) { return FALSE; } addr_info = create_addr_info(&sock_addr_bth_local); if (!addr_info) { return FALSE; } ret = advertise_service_accepted(addr_info, &instance_name); if (!ret) { free(addr_info); if (instance_name) { free(instance_name); } return FALSE; } if (listen(local_socket, 4) == SOCKET_ERROR) { print_error("listen()", WSAGetLastError()); free(addr_info); free(instance_name); return FALSE; } while (1) { printf("Waiting for client connection..."); SOCKET client_socket = accept(local_socket, NULL, NULL); if (client_socket == INVALID_SOCKET) { print_error("accept()", WSAGetLastError()); return FALSE; } printf("Client connected !\n"); char *buffer = NULL; while(1) { if(!readBuffer(buffer,client_socket)) { return FALSE; } if(!strcmp(buffer,"openNoGba")){ WinExec("E:\\NO$GBA.2.6a\\NO$GBA.exe",1); free(buffer); } else if(!strcmp(buffer,"openMyComp")) { openMyComputer(); free(buffer); } else if(!strcmp(buffer,"joystick")) { free(buffer); printf("Start joystick mode\n"); while(1) { if(!readBuffer(buffer,client_socket)) { return FALSE; } joystickCMP(buffer); if(!strcmp(buffer,"endJoystick")){ free(buffer); break; } free(buffer); } printf("End joystick mode\n"); continue; } else if(!strcmp(buffer,"openPlayer")) { free(buffer); WinExec("C:\\Program Files (x86)\\AIMP3\\AIMP3.exe",1); printf("Start player mode\n"); while(1) { if(!readBuffer(buffer,client_socket)) { return FALSE; } playerCMP(buffer); if(!strcmp(buffer,"endPlayer")){ free(buffer); break; } free(buffer); } printf("End player mode\n"); continue; } else if(!strcmp(buffer,"end")) { free(buffer); break; } else mouseCMP(buffer); } printf("Communication over\n"); closesocket(client_socket); printf("Continue?(press 'n' to exit)"); if(end = getch() == 'n') { break; } } free(addr_info); free(instance_name); closesocket(local_socket); return TRUE; }