int RelayServer::SendTcpPacket(uint8_t* payload, size_t len) { int max_socket_so_far = 0; if(! server_is_set) { server_socket = SetupServer(port); server_is_set = true; cout<<"Relay server socket is set to: "<<server_socket<<endl; } conn_accepted = false; FD_ZERO(¤t_sockets); FD_SET(server_socket,¤t_sockets); if(FD_ISSET(server_socket, ¤t_sockets)) { cout<<"Current socket is set with value of server_socket"<<endl; }; max_socket_so_far = server_socket; while(! conn_accepted) { //beacause select is destructive ready_sockets = current_sockets; timeval tv; tv.tv_sec = 2; tv.tv_usec = 0; int numb_of_desc; numb_of_desc = select(max_socket_so_far,&ready_sockets, NULL, NULL, &tv); if(numb_of_desc < 0) { perror("select error"); } cout<<"Number of descriptors ready to be read from is: "<<numb_of_desc<<endl; for(int i=0; i < max_socket_so_far;i++) { if(FD_ISSET(i, &ready_sockets)) { if(i == server_socket){ //this is a new connection cout<<"FOund server socket"<<endl; client_socket = AcceptNewConnection(server_socket); FD_SET(client_socket, ¤t_sockets);// add client socket to sockets which will be watching if(client_socket > max_socket_so_far) { max_socket_so_far = client_socket; } conn_accepted = true; } else { //do whatever we do with connections int payload_ret = HandleConnection(i,payload,len); if(payload_ret != -1) { FD_CLR(i,¤t_sockets); return payload_ret; } else { //close(client_socket); //i = -1; //continue; } } } } } return 255; }
select()
numb_of_desc = select(max_socket_so_far + 1, &ready_sockets, NULL, NULL, &tv);
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)