Rev 4704 | Rev 4709 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4704 | Rev 4708 | ||
---|---|---|---|
Line 232... | Line 232... | ||
232 | } |
232 | } |
233 | 233 | ||
234 | int main( int argc, char * argv[] ){ |
234 | int main( int argc, char * argv[] ){ |
235 | ERROR_DECLARE; |
235 | ERROR_DECLARE; |
236 | 236 | ||
237 | int size = 1024; |
237 | size_t size = 1024; |
238 | int verbose = 0; |
238 | int verbose = 0; |
239 | char * reply = NULL; |
239 | char * reply = NULL; |
240 | sock_type_t type = SOCK_DGRAM; |
240 | sock_type_t type = SOCK_DGRAM; |
241 | int count = -1; |
241 | int count = -1; |
242 | struct sockaddr_in address = { .sin_family = PF_INET, .sin_port = 7 }; |
242 | struct sockaddr_in address = { .sin_family = PF_INET, .sin_port = 7 }; |
243 | 243 | ||
244 | int socket_id; |
244 | int socket_id; |
245 | int address_length; |
245 | int address_length; |
246 | char address_string[ INET_ADDRSTRLEN ]; |
246 | char address_string[ INET_ADDRSTRLEN ]; |
247 | char * data; |
247 | char * data; |
248 | int length; |
248 | size_t length; |
249 | int index; |
249 | int index; |
250 | size_t reply_length; |
250 | size_t reply_length; |
251 | int value; |
251 | int value; |
252 | 252 | ||
253 | printf( "Task %d - ", task_get_id()); |
253 | printf( "Task %d - ", task_get_id()); |
Line 263... | Line 263... | ||
263 | break; |
263 | break; |
264 | case 'h': print_help(); |
264 | case 'h': print_help(); |
265 | return EOK; |
265 | return EOK; |
266 | break; |
266 | break; |
267 | case 'p': ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "port number", 0 )); |
267 | case 'p': ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "port number", 0 )); |
268 | address.sin_port = value; |
268 | address.sin_port = ( uint16_t ) value; |
269 | break; |
269 | break; |
270 | case 'r': ERROR_PROPAGATE( parse_parameter_string( argc, argv, & index, & reply, "reply string", 0 )); |
270 | case 'r': ERROR_PROPAGATE( parse_parameter_string( argc, argv, & index, & reply, "reply string", 0 )); |
271 | break; |
271 | break; |
272 | case 's': ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & size, "receive size", 0 )); |
272 | case 's': ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "receive size", 0 )); |
- | 273 | size = (value >= 0 ) ? ( size_t ) value : 0; |
|
273 | break; |
274 | break; |
274 | case 't': ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, ( int * ) & type, "socket_type", 0, parse_socket_type )); |
275 | case 't': ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & value, "socket_type", 0, parse_socket_type )); |
- | 276 | type = ( sock_type_t ) value; |
|
275 | break; |
277 | break; |
276 | case 'v': verbose = 1; |
278 | case 'v': verbose = 1; |
277 | break; |
279 | break; |
278 | case '-': if( str_lcmp( argv[ index ] + 2, "count=", 6 ) == 0 ){ |
280 | case '-': if( str_lcmp( argv[ index ] + 2, "count=", 6 ) == 0 ){ |
279 | ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "received count", 8 )) |
281 | ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "received count", 8 )) |
280 | }else if( str_lcmp( argv[ index ] + 2, "family=", 7 ) == 0 ){ |
282 | }else if( str_lcmp( argv[ index ] + 2, "family=", 7 ) == 0 ){ |
281 | ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & value, "protocol family", 9, parse_protocol_family )); |
283 | ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & value, "protocol family", 9, parse_protocol_family )); |
282 | address.sin_family = value; |
284 | address.sin_family = ( uint16_t ) value; |
283 | }else if( str_lcmp( argv[ index ] + 2, "help", 5 ) == 0 ){ |
285 | }else if( str_lcmp( argv[ index ] + 2, "help", 5 ) == 0 ){ |
284 | print_help(); |
286 | print_help(); |
285 | return EOK; |
287 | return EOK; |
286 | }else if( str_lcmp( argv[ index ] + 2, "port=", 5 ) == 0 ){ |
288 | }else if( str_lcmp( argv[ index ] + 2, "port=", 5 ) == 0 ){ |
287 | ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "port number", 7 )); |
289 | ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "port number", 7 )); |
288 | address.sin_port = value; |
290 | address.sin_port = ( uint16_t ) value; |
289 | }else if( str_lcmp( argv[ index ] + 2, "reply=", 6 ) == 0 ){ |
291 | }else if( str_lcmp( argv[ index ] + 2, "reply=", 6 ) == 0 ){ |
290 | ERROR_PROPAGATE( parse_parameter_string( argc, argv, & index, & reply, "reply string", 8 )); |
292 | ERROR_PROPAGATE( parse_parameter_string( argc, argv, & index, & reply, "reply string", 8 )); |
291 | }else if( str_lcmp( argv[ index ] + 2, "size=", 5 ) == 0 ){ |
293 | }else if( str_lcmp( argv[ index ] + 2, "size=", 5 ) == 0 ){ |
292 | ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & size, "receive size", 7 )); |
294 | ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "receive size", 7 )); |
- | 295 | size = (value >= 0 ) ? ( size_t ) value : 0; |
|
293 | }else if( str_lcmp( argv[ index ] + 2, "type=", 5 ) == 0 ){ |
296 | }else if( str_lcmp( argv[ index ] + 2, "type=", 5 ) == 0 ){ |
294 | ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, ( int * ) & type, "socket_type", 7, parse_socket_type )); |
297 | ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & value, "socket_type", 7, parse_socket_type )); |
- | 298 | type = ( sock_type_t ) value; |
|
295 | }else if( str_lcmp( argv[ index ] + 2, "verbose", 8 ) == 0 ){ |
299 | }else if( str_lcmp( argv[ index ] + 2, "verbose", 8 ) == 0 ){ |
296 | verbose = 1; |
300 | verbose = 1; |
297 | }else{ |
301 | }else{ |
298 | print_unrecognized( index, argv[ index ] + 2 ); |
302 | print_unrecognized( index, argv[ index ] + 2 ); |
299 | return EINVAL; |
303 | return EINVAL; |
Line 333... | Line 337... | ||
333 | 337 | ||
334 | if( verbose ) printf( "Listenning at %d\n", address.sin_port ); |
338 | if( verbose ) printf( "Listenning at %d\n", address.sin_port ); |
335 | 339 | ||
336 | while( count ){ |
340 | while( count ){ |
337 | address_length = sizeof( address ); |
341 | address_length = sizeof( address ); |
338 | length = recvfrom( socket_id, data, size, 0, ( struct sockaddr * ) & address, & address_length ); |
342 | value = recvfrom( socket_id, data, size, 0, ( struct sockaddr * ) & address, & address_length ); |
339 | if( length < 0 ){ |
343 | if( value < 0 ){ |
340 | fprintf( stderr, "Socket receive error %d\n", length ); |
344 | fprintf( stderr, "Socket receive error %d\n", value ); |
341 | }else{ |
345 | }else{ |
- | 346 | length = ( size_t ) value; |
|
342 | if( verbose ){ |
347 | if( verbose ){ |
343 | if( ERROR_OCCURRED( inet_ntop( address.sin_family, ( uint8_t * ) & address.sin_addr.s_addr, address_string, sizeof( address_string )))){ |
348 | if( ERROR_OCCURRED( inet_ntop( address.sin_family, ( uint8_t * ) & address.sin_addr.s_addr, address_string, sizeof( address_string )))){ |
344 | fprintf( stderr, "Received address error %d\n", ERROR_CODE ); |
349 | fprintf( stderr, "Received address error %d\n", ERROR_CODE ); |
345 | continue; |
350 | continue; |
346 | }else{ |
351 | }else{ |
347 | data[ length ] = '\0'; |
352 | data[ length ] = '\0'; |
348 | printf( "Received from %s:%d\n%s\n", address_string, address.sin_port, data ); |
353 | printf( "Received from %s:%d\n%s\n", address_string, address.sin_port, data ); |
349 | } |
354 | } |
350 | } |
355 | } |
351 | if( ERROR_OCCURRED( sendto( socket_id, reply ? reply : data, reply ? reply_length : ( size_t ) length, 0, ( struct sockaddr * ) & address, sizeof( address )))){ |
356 | if( ERROR_OCCURRED( sendto( socket_id, reply ? reply : data, reply ? reply_length : length, 0, ( struct sockaddr * ) & address, sizeof( address )))){ |
352 | fprintf( stderr, "Socket send error %d\n", ERROR_CODE ); |
357 | fprintf( stderr, "Socket send error %d\n", ERROR_CODE ); |
353 | } |
358 | } |
354 | } |
359 | } |
355 | if( count > 0 ){ |
360 | if( count > 0 ){ |
356 | -- count; |
361 | -- count; |