SocketConnector.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (c) 2001-2014
3 **
4 ** This file is part of the QuickFIX FIX Engine
5 **
6 ** This file may be distributed under the terms of the quickfixengine.org
7 ** license as defined by quickfixengine.org and appearing in the file
8 ** LICENSE included in the packaging of this file.
9 **
10 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
11 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12 **
13 ** See http://www.quickfixengine.org/LICENSE for licensing information.
14 **
15 ** Contact ask@quickfixengine.org if any conditions of this licensing are
16 ** not clear to you.
17 **
18 ****************************************************************************/
19 
20 #ifdef _MSC_VER
21 #include "stdafx.h"
22 #else
23 #include "config.h"
24 #endif
25 
26 #include "SocketConnector.h"
27 #include "Utility.h"
28 #ifndef _MSC_VER
29 #include <unistd.h>
30 #include <sys/ioctl.h>
31 #include <sys/types.h>
32 #include <sys/stat.h>
33 #endif
34 #include <iostream>
35 
36 namespace FIX
37 {
39 class ConnectorWrapper : public SocketMonitor::Strategy
40 {
41 public:
42  ConnectorWrapper( SocketConnector& connector,
43  SocketConnector::Strategy& strategy )
44 : m_connector( connector ), m_strategy( strategy ) {}
45 
46 private:
47  void onConnect( SocketMonitor&, int socket )
48  {
49  m_strategy.onConnect( m_connector, socket );
50  }
51 
52  void onWrite( SocketMonitor&, int socket )
53  {
54  m_strategy.onWrite( m_connector, socket );
55  }
56 
57  void onEvent( SocketMonitor&, int socket )
58  {
59  if( !m_strategy.onData( m_connector, socket ) )
61  }
62 
63  void onError( SocketMonitor&, int socket )
64  {
66  }
67 
68  void onError( SocketMonitor& )
69  {
71  }
72 
73  void onTimeout( SocketMonitor& )
74  {
76  };
77 
80 };
81 
83 : m_monitor( timeout ) {}
84 
85 int SocketConnector::connect( const std::string& address, int port, bool noDelay,
86  int sendBufSize, int rcvBufSize,
87  const std::string& sourceAddress, int sourcePort)
88 {
89  int socket = socket_createConnector();
90 
91  if ( socket != -1 )
92  {
93  if( noDelay )
94  socket_setsockopt( socket, TCP_NODELAY );
95  if( sendBufSize )
96  socket_setsockopt( socket, SO_SNDBUF, sendBufSize );
97  if( rcvBufSize )
98  socket_setsockopt( socket, SO_RCVBUF, rcvBufSize );
99  if ( !sourceAddress.empty() || sourcePort )
100  socket_bind( socket, sourceAddress.c_str(), sourcePort );
101  m_monitor.addConnect( socket );
102  socket_connect( socket, address.c_str(), port );
103  }
104  return socket;
105 }
106 
107 int SocketConnector::connect( const std::string& address, int port, bool noDelay,
108  int sendBufSize, int rcvBufSize, Strategy& strategy )
109 {
110  int socket = connect( address, port, noDelay, sendBufSize, rcvBufSize, "", 0);
111  return socket;
112 }
113 
114 void SocketConnector::block( Strategy& strategy, bool poll, double timeout )
115 {
116  ConnectorWrapper wrapper( *this, strategy );
117  m_monitor.block( wrapper, poll, timeout );
118 }
119 }
FIX::ConnectorWrapper::onWrite
void onWrite(SocketMonitor &, int socket)
Definition: SocketConnector.cpp:86
FIX::SocketMonitor::block
void block(Strategy &strategy, bool poll=0, double timeout=0.0)
Definition: SocketMonitor.cpp:198
FIX::SocketConnector::Strategy::onDisconnect
virtual void onDisconnect(SocketConnector &, int socket)=0
FIX::ConnectorWrapper::ConnectorWrapper
ConnectorWrapper(SocketConnector &connector, SocketConnector::Strategy &strategy)
Definition: SocketConnector.cpp:76
FIX::socket_setsockopt
int socket_setsockopt(int s, int opt)
Definition: Utility.cpp:225
FIX::SocketConnector::Strategy::onTimeout
virtual void onTimeout(SocketConnector &)
Definition: SocketConnector.h:97
FIX::SocketMonitor
Monitors events on a collection of sockets.
Definition: SocketMonitor.h:64
FIX::socket_connect
int socket_connect(int socket, const char *address, int port)
Definition: Utility.cpp:165
FIX::SocketMonitor::addConnect
bool addConnect(int socket)
Definition: SocketMonitor.cpp:82
FIX::ConnectorWrapper::onError
void onError(SocketMonitor &, int socket)
Definition: SocketConnector.cpp:97
FIX::SocketConnector::Strategy
Definition: SocketConnector.h:88
FIX::SocketConnector
Connects sockets to remote ports and addresses.
Definition: SocketConnector.h:52
FIX::socket_bind
int socket_bind(int socket, const char *hostname, int port)
Definition: Utility.cpp:120
FIX::SocketConnector::Strategy::onWrite
virtual void onWrite(SocketConnector &, int socket)=0
FIX::ConnectorWrapper::onEvent
void onEvent(SocketMonitor &, int socket)
Definition: SocketConnector.cpp:91
FIX::SocketConnector::Strategy::onError
virtual void onError(SocketConnector &)=0
FIX::ConnectorWrapper::m_connector
SocketConnector & m_connector
Definition: SocketConnector.cpp:110
FIX::socket_createConnector
int socket_createConnector()
Definition: Utility.cpp:160
FIX::SocketConnector::SocketConnector
SocketConnector(int timeout=0)
Definition: SocketConnector.cpp:99
FIX::ConnectorWrapper::m_strategy
SocketConnector::Strategy & m_strategy
Definition: SocketConnector.cpp:113
FIX::SocketConnector::connect
int connect(const std::string &address, int port, bool noDelay, int sendBufSize, int rcvBufSize, const std::string &sourceAddress="", int sourcePort=0)
Definition: SocketConnector.cpp:102
FIX::SocketConnector::m_monitor
SocketMonitor m_monitor
Definition: SocketConnector.h:85
FIX::SocketConnector::Strategy::onData
virtual bool onData(SocketConnector &, int socket)=0
FIX
Definition: Acceptor.cpp:34
FIX::ConnectorWrapper::onConnect
void onConnect(SocketMonitor &, int socket)
Definition: SocketConnector.cpp:81
FIX::ConnectorWrapper::onTimeout
void onTimeout(SocketMonitor &)
Definition: SocketConnector.cpp:107
FIX::SocketConnector::Strategy::onConnect
virtual void onConnect(SocketConnector &, int socket)=0
FIX::SocketConnector::block
void block(Strategy &strategy, bool poll=0, double timeout=0.0)
Definition: SocketConnector.cpp:131
SocketConnector.h
FIX::ConnectorWrapper
Handles events from SocketMonitor for client connections.
Definition: SocketConnector.cpp:56
Utility.h

Generated on Wed Apr 29 2020 19:41:30 for QuickFIX by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2001