Пример #1
0
void fakempi_connect( sFakeMPI* fakempi )
{
    /*
     *親ノードなら
     */
    if ( fakempi->myrank == 0 ){
        /*
         *socketをnprocs-1だけ開く。ポートが重複しないようにするには、あらかじめそのポートが使えるかどうかを調べておいた方がよかろう。
         */
        int i;
        for( i=1; i<fakempi->nprocs; i++ ){
            fakempi->socks[i] = listen_socket( i + fakempi->portbase );
        }
        fprintf( fakempi_verbose, "Parent is listening.\n" );
        for( i=1; i<fakempi->nprocs; i++ ){
            fakempi->msgsocks[i] = accept_child( fakempi->socks[i] );
        }
    }
    else{
        /*
         *親のソケットに接続する。
         */
        sleep( 0 );
        fakempi->mysock = get_connected( fakempi->myrank + fakempi->portbase );
        fprintf( fakempi_verbose, "Child %d is get connected.( socket %d ) \n", fakempi->myrank, fakempi->mysock );
    }
}
Пример #2
0
int main(int argc, char** argv)
{
  struct configuration cfg;
  int parent, sock, got;
  unsigned int pkt_num = 0;

  parse_options(argc, argv, &cfg);

  /* Initialise */
  parent = add_socket(&cfg);
  do_ioctl(&cfg, parent);
  sock = parent;
  if( cfg.cfg_protocol == IPPROTO_TCP )
    sock = accept_child(parent);
  do_ts_sockopt(sock);

  /* Run forever */
  while( 1 ) {
    pkt_num ++;
    got = do_recv(sock, pkt_num);
    /* TCP can detect an exit; for UDP, zero payload packets are valid */
    if ( got == 0 && cfg.cfg_protocol == IPPROTO_TCP ) {
      printf( "recvmsg returned 0 - end of stream\n" );
      break;
    }
  }

  close(sock);
  if( cfg.cfg_protocol == IPPROTO_TCP )
    close(parent);
  return 0;
}