Ejemplo n.º 1
0
void
d_print(point **p, distance* d)
{
  printf("(");
  p_print(p[d->i]);
  printf(")-(");
  p_print(p[d->j]);
  printf(")");
  printf("=%.2f", d->d);
}
Ejemplo n.º 2
0
/*
 * ホスト名からアドレスをとってきて connectしたソケットをかえす
 * 
 * Windowsでは、ノンブロッキングのconnectをつくる方法がわからなかった。
 * ので、ふつうにブロックするバージョんをまずつくってみる。
 *
 * かえりち:
 * -1 : gethostbyname error ( siteがみつからんとかいう )
 * -2 : socket error
 * -3 : connect error
 * -4 : 回復できない内部エラー(ばぐってます。)
 */
int p_connectToHTTPServer( char *h , int port )
{
    struct hostent* he;
    struct sockaddr_in sin;
    int sockfd;
    int r;
    
    sin.sin_family = AF_INET;
    sin.sin_port = htons( port );
    sin.sin_addr.s_addr = inet_addr( h );
    if( sin.sin_addr.s_addr == -1 ){
        he = gethostbyname( h );
        if( he == NULL ){
            p_print( "gethostbyname err." );
            return -1;
        }
        memcpy((void*)&sin.sin_addr.s_addr,
               he->h_addr, sizeof( struct in_addr));
    }

    sockfd = socket( AF_INET , SOCK_STREAM , 0 );
    if( sockfd <0 ){
        p_printError( "socket error\n" );
        return -2;
    }

    r = connect( sockfd , ( struct sockaddr*) &sin,
                 sizeof( struct sockaddr_in ));
    if( r < 0){
        p_print( "cannot connect\n");
        return -3;
    }


    
    /* ソケットが初期化できたので、こんどは、Conに登録する。 */
    if( con[sockfd].use ){
        p_printError( "in p_connectToServer: Con array inconsistency\n");
        return -4;
    }
    
    fprintf( stderr , "created client socket fd%d\n",sockfd);
    
    con[sockfd].use = 1;
    con[sockfd].rbuse = con[sockfd].wbuse = 0;
    con[sockfd].type = CONTYPE_SV;
    con[sockfd].id = p_createNewSocketID();
    con[sockfd].state = CONSTATE_HTTP_HEADER;
    con[sockfd].close_flag = 0;
    con[sockfd].asoc_id = -1;
    return sockfd;
}
Ejemplo n.º 3
0
void
t_print(Text text)
{
  Piece p = text.head;
  do {
    p_print(p);
    p = p->next;
  } while(p != NULL);
}
Ejemplo n.º 4
0
/*
  一般化用関数。このプロトタイプは common.h にあり

  初期化されたサーバソケットをかえす

  しっぱいしたら負ね.成功したら正の値

  とりあえず ftp についてはほったらかし

  http_port からはじめるが bind エラーがでたら1づつふやしてためす。
  100かいやってだめだったらあきらめる。
 */
int p_initServerSocket( int http_port , int ftp_port )
{
    int i;
    int ret;
    int s;
    
    /* まず HTTP をやる */
    for( i = 0 ;i < 100;i++){
        
        struct sockaddr_in sin;
        
        s = socket( AF_INET , SOCK_STREAM , 0 );
        if( s < 0 ) return s;

        bzero( &sin , sizeof( sin ));
        sin.sin_port = htons( http_port + i );
        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = INADDR_ANY;

        ret = bind( s , (struct sockaddr*)&sin,
                    sizeof(struct sockaddr_in ));
        if( ret < 0 ){
            close( s );
            continue;
        } else {
            break;
        }
    }
    if( i == 100 ) return -100;
    if( i > 0 ){
        char msg[100];
        sprintf( msg , "Bound on port: %d\n" , http_port + i );
        p_print( msg);
    }
    
    ret = listen( s , 5 );
    if( ret < 0 ){
        p_printError( "listen error!\n");
    }

    p_print( "server socket ok\n" );
    return s;
}