Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Deprecated/UDP.Unix/UnixSocketReceiver.cpp

Go to the documentation of this file.
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 // ::SendMsg
00016 // hostdata -> dest
00017 // dest
00018 // sento( ListenSocket, ... )
00019 
00020 // ::Listen()
00021 // ListenSocket = socket( ... )
00022 // srv
00023 
00024 // ::ListenThread()
00025 // socketData
00026 // client
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)  // Infinite loop
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 

Generated on Sun Oct 14 18:46:30 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001