#include <UDP_SocketClient.hpp>
Inheritance diagram for UDP_SocketClient::

Public Methods | |
| __inline | UDP_SocketClient (char *srvNameAddress, short TFTP_Port) |
| virtual __inline | ~UDP_SocketClient () |
| virtual __inline bool | send (void *msg, size_t msgLen) |
Static Private Methods | |
| void * | ListenThread (void *data) |
Private Attributes | |
| sockaddr_in | dest |
|
||||||||||||
|
Definition at line 6 of file UDP_SocketClient.cpp. 00007 : UDP_Socket() 00008 { 00009 memset( &dest, 0, sizeof( struct sockaddr_in ) ); 00010 00011 getHostData( srvNameAddress ); 00012 00013 dest.sin_family = PF_INET; 00014 dest.sin_addr = *(in_addr*)( hostdata->h_addr_list[0] ); 00015 dest.sin_port = htons( TFTP_Port ); 00016 00017 // Server part: 00018 00019 memset( &server, 0, sizeof( struct sockaddr_in ) ); 00020 00021 server.sin_family = PF_INET; 00022 server.sin_addr.s_addr = htonl( INADDR_ANY ); 00023 server.sin_port = htons( TFTP_Port ); 00024 00025 mySocket = socket( PF_INET, SOCK_DGRAM, 0 ); 00026 00027 if ( mySocket < 0 ) 00028 { 00029 printf( "Error: listen socket creation failed\n" ); 00030 } 00031 00032 // Start thread 00033 PrintInfo(); 00034 int ThreadID; 00035 pthread_t thread; 00036 ThreadID = pthread_create( &thread, 0, 00037 UDP_SocketClient::ListenThread, 00038 (void*)this 00039 ); 00040 if ( ThreadID ) 00041 { 00042 printf("Error creating listen thread\n"); 00043 exit( 3 ); 00044 } 00045 } |
|
|
Definition at line 108 of file UDP_SocketClient.cpp. 00108 { }
|
|
|
Definition at line 47 of file UDP_SocketClient.cpp. 00048 {
00049 UDP_SocketClient* me = (UDP_SocketClient*)data;
00050
00051 int serverAddrLength = sizeof( me->server );
00052
00053 while( 1 ) // Infinite loop
00054 {
00055 // Clear buffer
00056 memset( me->buffer, 0, UDP_BUFFER_SIZE );
00057
00058 int result = recvfrom( me->mySocket,
00059 me->buffer,
00060 UDP_BUFFER_SIZE, 0,
00061 (struct sockaddr *) &me->server,
00062 (socklen_t *) &serverAddrLength
00063 );
00064
00065 size_t pduLength = result;
00066 if ( pduLength > 60 ) pduLength = 60;
00067
00068 // We retrieve the client name from recvfrom()
00069
00070 if ( result >= 0 )
00071 {
00072 printf( "Received %d bytes\n", result);
00073 printf( "Message received from host %s port %i\n",
00074 inet_ntoa( me->server.sin_addr ),
00075 ntohs( me->server.sin_port )
00076 );
00077
00078 option.showChar( "Received:", (char*)me->buffer, pduLength );
00079
00080 fflush( stdout );
00081
00082 // Call TFTP_PacketParser
00083 UDP_CALLBACK();
00084
00085 fflush( 0 );
00086
00087 } else if ( result < -1 ) {
00088 printf( "[%d]", result );
00089 printf( "Error while receiving message: recvfrom() < 0 " );
00090 fflush( stdout );
00091 }
00092
00093 if ( me->dest.sin_addr.s_addr != me->server.sin_addr.s_addr )
00094 {
00095
00096 printf( "Error, received message from else where!\n" );
00097 exit( 4 );
00098 }
00099 }
00100 }
|
|
||||||||||||
|
Reimplemented from UDP_Socket. Definition at line 103 of file UDP_SocketClient.cpp. 00104 {
00105 return UDP_Socket::send( msg, msgLength, &dest );
00106 }
|
|
|
Definition at line 17 of file UDP_SocketClient.hpp. Referenced by ListenThread().
|
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001