Subversion Repositories HelenOS

Rev

Rev 4737 | Rev 4743 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4737 Rev 4741
Line 83... Line 83...
83
void print_help( void ){
83
void print_help( void ){
84
    printf(
84
    printf(
85
        "Network Echo aplication\n" \
85
        "Network Echo aplication\n" \
86
        "Usage: echo [options]\n" \
86
        "Usage: echo [options]\n" \
87
        "Where options are:\n" \
87
        "Where options are:\n" \
-
 
88
        "-b backlog | --backlog=size\n" \
-
 
89
        "\tThe size of the accepted sockets queue. Only for SOCK_STREAM. The default is 3.\n" \
-
 
90
        "\n" \
88
        "-c count | --count=count\n" \
91
        "-c count | --count=count\n" \
89
        "\tThe number of received messages to handle. A negative number means infinity. The default is infinity.\n" \
92
        "\tThe number of received messages to handle. A negative number means infinity. The default is infinity.\n" \
90
        "\n" \
93
        "\n" \
91
        "-f protocol_family | --family=protocol_family\n" \
94
        "-f protocol_family | --family=protocol_family\n" \
92
        "\tThe listenning socket protocol family. Only the PF_INET and PF_INET6 are supported.\n"
95
        "\tThe listenning socket protocol family. Only the PF_INET and PF_INET6 are supported.\n"
Line 137... Line 140...
137
    char *              reply           = NULL;
140
    char *              reply           = NULL;
138
    sock_type_t         type            = SOCK_DGRAM;
141
    sock_type_t         type            = SOCK_DGRAM;
139
    int                 count           = -1;
142
    int                 count           = -1;
140
    int                 family          = PF_INET;
143
    int                 family          = PF_INET;
141
    uint16_t            port            = 7;
144
    uint16_t            port            = 7;
-
 
145
    int                 backlog         = 3;
142
 
146
 
143
    socklen_t           max_length      = sizeof( struct sockaddr_in6 );
147
    socklen_t           max_length      = sizeof( struct sockaddr_in6 );
144
    uint8_t             address_data[ max_length ];
148
    uint8_t             address_data[ max_length ];
145
    struct sockaddr *       address     = ( struct sockaddr * ) address_data;
149
    struct sockaddr *       address     = ( struct sockaddr * ) address_data;
146
    struct sockaddr_in *    address_in      = ( struct sockaddr_in * ) address;
150
    struct sockaddr_in *    address_in      = ( struct sockaddr_in * ) address;
Line 160... Line 164...
160
    printf( "%s\n", NAME );
164
    printf( "%s\n", NAME );
161
 
165
 
162
    for( index = 1; index < argc; ++ index ){
166
    for( index = 1; index < argc; ++ index ){
163
        if( argv[ index ][ 0 ] == '-' ){
167
        if( argv[ index ][ 0 ] == '-' ){
164
            switch( argv[ index ][ 1 ] ){
168
            switch( argv[ index ][ 1 ] ){
-
 
169
                case 'b':   ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & backlog, "accepted sockets queue size", 0 ));
-
 
170
                            break;
165
                case 'c':   ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "message count", 0 ));
171
                case 'c':   ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "message count", 0 ));
166
                            break;
172
                            break;
167
                case 'f':   ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & family, "protocol family", 0, parse_protocol_family ));
173
                case 'f':   ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & family, "protocol family", 0, parse_protocol_family ));
168
                            break;
174
                            break;
169
                case 'h':   print_help();
175
                case 'h':   print_help();
Line 180... Line 186...
180
                case 't':   ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & value, "socket type", 0, parse_socket_type ));
186
                case 't':   ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & value, "socket type", 0, parse_socket_type ));
181
                            type = ( sock_type_t ) value;
187
                            type = ( sock_type_t ) value;
182
                            break;
188
                            break;
183
                case 'v':   verbose = 1;
189
                case 'v':   verbose = 1;
184
                            break;
190
                            break;
185
                case '-':   if( str_lcmp( argv[ index ] + 2, "count=", 6 ) == 0 ){
191
                case '-':   if( str_lcmp( argv[ index ] + 2, "backlog=", 6 ) == 0 ){
-
 
192
                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & backlog, "accepted sockets queue size", 8 ));
-
 
193
                            }else if( str_lcmp( argv[ index ] + 2, "count=", 6 ) == 0 ){
186
                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "message count", 8 ));
194
                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "message count", 8 ));
187
                            }else if( str_lcmp( argv[ index ] + 2, "family=", 7 ) == 0 ){
195
                            }else if( str_lcmp( argv[ index ] + 2, "family=", 7 ) == 0 ){
188
                                ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & family, "protocol family", 9, parse_protocol_family ));
196
                                ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & family, "protocol family", 9, parse_protocol_family ));
189
                            }else if( str_lcmp( argv[ index ] + 2, "help", 5 ) == 0 ){
197
                            }else if( str_lcmp( argv[ index ] + 2, "help", 5 ) == 0 ){
190
                                print_help();
198
                                print_help();
Line 261... Line 269...
261
        socket_print_error( stderr, listening_id, "Socket create: ", "\n" );
269
        socket_print_error( stderr, listening_id, "Socket create: ", "\n" );
262
        return listening_id;
270
        return listening_id;
263
    }
271
    }
264
 
272
 
265
    if( type == SOCK_STREAM ){
273
    if( type == SOCK_STREAM ){
-
 
274
        if( backlog <= 0 ){
-
 
275
            fprintf( stderr, "Accepted sockets queue size too small (%d). Using 3 instead.\n", size );
-
 
276
            backlog = 3;
-
 
277
        }
266
        if( ERROR_OCCURRED( listen( listening_id, 3 ))){
278
        if( ERROR_OCCURRED( listen( listening_id, backlog ))){
267
            socket_print_error( stderr, ERROR_CODE, "Socket listen: ", "\n" );
279
            socket_print_error( stderr, ERROR_CODE, "Socket listen: ", "\n" );
268
            return ERROR_CODE;
280
            return ERROR_CODE;
269
        }
281
        }
270
    }
282
    }
271
 
283