00001 #include "UnixSocketReceiver.hpp"
00002
00003 UnixSocketReceiver::UnixSocketReceiver( short Listen_Port )
00004 {
00005 ListenSocket = INVALID_SOCKET;
00006
00007 memset( &srv, 0, sizeof( struct sockaddr_in ) );
00008 memset( &client, 0, sizeof( struct sockaddr_in ) );
00009
00010 srv.sin_family = PF_INET;
00011 srv.sin_addr.s_addr = htonl( INADDR_ANY );
00012 srv.sin_port = htons( Listen_Port );
00013 }
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 UnixSocketReceiver::~UnixSocketReceiver()
00029 {
00030 if ( ListenSocket != INVALID_SOCKET )
00031 {
00032 closesocket(ListenSocket);
00033 }
00034 }
00035
00036 inline SOCKET UnixSocketReceiver::getSocket()
00037 {
00038 return ListenSocket;
00039 }
00040
00041 void* UnixSocketReceiver::ListenThread(void* data)
00042 {
00043 char buf[ BUFFER_SIZE ];
00044 UnixSocketReceiver* socketData = (UnixSocketReceiver*)data;
00045
00046 int msglen = sizeof( socketData->client);
00047
00048 while(1)
00049 {
00050 int result = recvfrom( socketData->ListenSocket,
00051 buf,
00052 sizeof(buf) - 1, 0,
00053 (struct sockaddr*)&socketData->client,
00054 (socklen_t *)&msglen
00055 );
00056
00057 if ( result > 0 )
00058 {
00059
00060 buf[ result ] = 0;
00061
00062 printf("Message received from host %s port %i\n",
00063 inet_ntoa( socketData->client.sin_addr ),
00064 ntohs( socketData->client.sin_port )
00065 );
00066
00067 printf("%s",buf);
00068 fflush(0);
00069 }
00070 }
00071 }
00072
00073 bool UnixSocketReceiver::Listen()
00074 {
00075 ListenSocket = socket(PF_INET, SOCK_DGRAM, 0);
00076
00077 if ( ListenSocket == INVALID_SOCKET )
00078 {
00079 printf( "Error: listen socket creation failed\n" );
00080 return false;
00081 }
00082
00083 if( bind(ListenSocket, (struct sockaddr*)&srv, sizeof(srv) ) != 0 )
00084 {
00085 printf("Error: bind on listen socket failed\n");
00086 closesocket(ListenSocket);
00087 return false;
00088 }
00089
00090 int ThreadID;
00091
00092 pthread_t thread;
00093 ThreadID = pthread_create( &thread, 0,
00094 UnixSocketReceiver::ListenThread,
00095 (void*)this
00096 );
00097 if ( ThreadID )
00098 {
00099 printf("Error creating listen thread\n");
00100 return false;
00101 } else {
00102 return true;
00103 }
00104 }
00105