4 #ifndef Gw_WatcherProducer
33 #include <sys/socket.h>
34 #include <arpa/inet.h>
38 #include <netinet/in.h>
48 void WatcherProducer::process_reset (UInt_t *)
53 WatcherProducer::~WatcherProducer()
56 process_reset(&error_code);
59 Bool_t WatcherProducer::SetConnection(
const Char_t *machine, UInt_t port)
73 Bool_t WatcherProducer::OpenSocket()
77 struct sockaddr_in servAddr;
78 struct sockaddr_in sin_me;
80 struct hostent *host_addr;
85 sock = socket(AF_INET, SOCK_STREAM, 0);
92 memset((
char *)&sin_me, 0,
sizeof(sin_me));
95 memset(&servAddr, 0,
sizeof(servAddr));
97 servAddr.sin_family = AF_INET;
98 host_addr = gethostbyname(fMachine.Data());
100 servAddr.sin_family = host_addr->h_addrtype;
102 memcpy((
char *)&tmp,host_addr->h_addr,host_addr->h_length);
106 servAddr.sin_addr.s_addr =
tmp;
107 servAddr.sin_port = htons(fPort);
109 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(
char *)&one,
sizeof(one));
110 bind(sock, (
struct sockaddr *)&sin_me,
sizeof(sin_me));
114 fcntl(sock, F_SETFL, O_NONBLOCK);
115 if ( ( val = connect(sock, (
struct sockaddr *) &servAddr,
sizeof(servAddr)) ) < 0)
119 printf(
"toto 3 %d %s \n",val,strerror(errno));
126 if ( (fSocket =
new TSocket(fMachine.Data(),fPort)) ) {
127 return fSocket->IsValid();
133 Bool_t WatcherProducer::CloseSocket()
140 {
delete fSocket; fSocket = 0x0; }
145 void WatcherProducer::SetTimeout(Long_t timeout)
158 UInt_t error_code = 0u; Int_t bsize = 0; Int_t ret;
248 ret = recv (sock, &bsize,
sizeof (UInt_t), 0);
251 Log <<
debug <<
" Receive size of the buffer " << ret <<
dolog;
253 if ( ret ==
sizeof(UInt_t) && bsize > 0 ) {
256 if ( fBuffer.Reserve(bsize) ) {
258 Log <<
debug <<
" Ask for the buffer " <<
dolog;
260 int total_received_data = 0;
261 while (total_received_data < bsize)
263 ret = recv (sock, fBuffer.CurrentAddress(),bsize, 0);
265 total_received_data += ret;
269 fBuffer.SetOffset(total_received_data);
272 if ( total_received_data == bsize ) {
274 block.
SetBlock(fBuffer.Address(),bsize,
'-');
276 Log <<
info <<
"A new block has been received " << bsize <<
dolog;
278 else error_code = 5u;
280 else error_code = 4u;
289 ret = fSocket->RecvRaw(&bsize,
sizeof(UInt_t),kDontBlock);
291 Log <<
debug <<
" Receive size of the buffer " << ret <<
dolog;
293 if ( ret ==
sizeof(UInt_t) && bsize > 0 ) {
296 if ( fBuffer.Reserve(bsize) ) {
298 Log <<
debug <<
" Ask for the buffer " <<
dolog;
300 switch ( fSocket->Select(TSocket::kRead,2) )
313 ret = fSocket->RecvRaw(fBuffer.Address(), bsize);
314 if ( ret == bsize ) {
315 block.
SetBlock(fBuffer.Address(),bsize,
'-');
318 Log <<
info <<
" Size received too small " << ret <<
" expected " << bsize <<
dolog;
346 else error_code = 4u;
printf("******************************************************************** \n")
LogMessage & info(LogMessage &)
manipulator to modify the LogMessage
LogMessage & debug(LogMessage &)
virtual Bool_t SetBlock(Char_t *=0x0, UInt_t=0u, char= 'r', char= 'l', UInt_t=0u)=0
Attach a external block to this.
header file for FrameIO.cpp
LogMessage & dolog(LogMessage &)