void TcpSession::handle_read(std::shared_ptr<TcpSession> s, std::shared_ptr<ByteArray> d, const boost::system::error_code &error, size_t bytes_transferred) { if (!error) { ByteArray read(reinterpret_cast<const unsigned char*>(d->data()),bytes_transferred); handleIncoming(read); scheduleRead(); } }
int main(int argc, char *argv[]) { int sockfd, newsockfd, portno; socklen_t clilen; struct sockaddr_in serv_addr, cli_addr; int pid; int yes = 1; if (argc < 2) { fprintf(stderr,"ERROR, no port provided\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); //allows us to reuse the socket if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) error("ERROR on binding"); //listen for up to 5 incoming connection listen(sockfd, 5); clilen = sizeof(cli_addr); //fork off child processes for incoming connections while (1) { newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) error("ERROR on accept"); if (!fork()) { //child doens't need the listener close(sockfd); //receive incoming files and store filenames handleIncoming(newsockfd); exit(0); } } return 0; }
void RPC::runLogic() { signalIncoming.tryTake(); while(true) { running.give(); ingoing = false; log << "Waiting for signal" << endl; signalIncoming.take(); log << "Got a signal" << endl; if(ingoing) { log << "Incoming signal" << endl; handleIncoming(); } else { log << "Outgoing signal" << endl; handleOutgoing(); } } }
/* * Process incoming data. If no data is available, this will block until * some arrives. * * Returns "false" on error (indicating that the connection has been severed). */ bool jdwpProcessIncoming(NetState* netState) { int cc; assert(netState->dbg.sock >= 0); assert(netState->vm.sock >= 0); while (!haveFullPacket(&netState->dbg) && !haveFullPacket(&netState->vm)) { /* read some more */ int highFd; fd_set readfds; highFd = (netState->dbg.sock > netState->vm.sock) ? netState->dbg.sock+1 : netState->vm.sock+1; FD_ZERO(&readfds); FD_SET(netState->dbg.sock, &readfds); FD_SET(netState->vm.sock, &readfds); errno = 0; cc = select(highFd, &readfds, NULL, NULL, NULL); if (cc < 0) { if (errno == EINTR) { fprintf(stderr, "+++ EINTR on select\n"); continue; } fprintf(stderr, "+++ select failed: %s\n", strerror(errno)); goto fail; } if (FD_ISSET(netState->dbg.sock, &readfds)) { cc = read(netState->dbg.sock, netState->dbg.inputBuffer + netState->dbg.inputCount, sizeof(netState->dbg.inputBuffer) - netState->dbg.inputCount); if (cc < 0) { if (errno == EINTR) { fprintf(stderr, "+++ EINTR on read\n"); continue; } fprintf(stderr, "+++ dbg read failed: %s\n", strerror(errno)); goto fail; } if (cc == 0) { if (sizeof(netState->dbg.inputBuffer) == netState->dbg.inputCount) fprintf(stderr, "+++ debugger sent huge message\n"); else fprintf(stderr, "+++ debugger disconnected\n"); goto fail; } /*printf("*** %d bytes from dbg\n", cc);*/ netState->dbg.inputCount += cc; } if (FD_ISSET(netState->vm.sock, &readfds)) { cc = read(netState->vm.sock, netState->vm.inputBuffer + netState->vm.inputCount, sizeof(netState->vm.inputBuffer) - netState->vm.inputCount); if (cc < 0) { if (errno == EINTR) { fprintf(stderr, "+++ EINTR on read\n"); continue; } fprintf(stderr, "+++ vm read failed: %s\n", strerror(errno)); goto fail; } if (cc == 0) { if (sizeof(netState->vm.inputBuffer) == netState->vm.inputCount) fprintf(stderr, "+++ vm sent huge message\n"); else fprintf(stderr, "+++ vm disconnected\n"); goto fail; } /*printf("*** %d bytes from vm\n", cc);*/ netState->vm.inputCount += cc; } } if (!handleIncoming(&netState->dbg, &netState->vm)) goto fail; if (!handleIncoming(&netState->vm, &netState->dbg)) goto fail; return true; fail: jdwpCloseConnection(netState); return false; }
Kommunikator::Kommunikator(QObject *parent) : QObject(parent), seq_(0), ks_(Unestablished) { connect(&jsr_, SIGNAL(jsonReceived(QVariant)), this, SLOT(handleIncoming(QVariant))); }