#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().
|