summaryrefslogtreecommitdiff
path: root/ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp')
-rw-r--r--ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp b/ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp
new file mode 100644
index 00000000000..550356bba2e
--- /dev/null
+++ b/ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp
@@ -0,0 +1,94 @@
+// $Id$
+
+#include "ace/TLI_Connector.h"
+#include "ace/INET_Addr.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_stdlib.h"
+#include "ace/OS_NS_unistd.h"
+#include "ace/Time_Value.h"
+
+ACE_RCSID(TLI_SAP, CPP_client, "$Id$")
+
+#if defined (ACE_HAS_TLI)
+
+/* ACE_TLI Client */
+
+int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ const ACE_TCHAR *host = argc > 1 ? argv[1] : ACE_DEFAULT_SERVER_HOST;
+ u_short r_port = argc > 2 ? ACE_OS::atoi (argv[2]) : ACE_DEFAULT_SERVER_PORT;
+ int timeout = argc > 3 ? ACE_OS::atoi (argv[3]) : ACE_DEFAULT_TIMEOUT;
+ u_short l_port = argc > 4 ? ACE_OS::atoi (argv[4]) : ACE_DEFAULT_LOCAL_PORT;
+
+ char buf[BUFSIZ];
+
+ ACE_TLI_Stream cli_stream;
+
+ ACE_INET_Addr remote_addr (r_port, host);
+ ACE_INET_Addr local_addr (l_port);
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("starting non-blocking connect\n")));
+
+ // Initiate timed, non-blocking connection with server.
+ ACE_TLI_Connector con;
+
+ if (con.connect (cli_stream,
+ remote_addr,
+ (ACE_Time_Value *) &ACE_Time_Value::zero,
+ local_addr,
+ 1) == -1)
+ {
+ if (errno != EWOULDBLOCK)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("connection failed")),
+ 1);
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("starting timed connect\n")));
+
+ // Check if non-blocking connection is in progress, and wait up
+ // to timeout seconds for it to complete.
+ ACE_Time_Value tv (timeout);
+
+ if (con.complete (cli_stream,
+ &remote_addr,
+ &tv) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("connection failed")),
+ 1);
+ else
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("connected to %s\n"),
+ remote_addr.get_host_name ()));
+ }
+
+ // Send data to server (correctly handles "incomplete writes").
+
+ for (int r_bytes;
+ (r_bytes = ACE_OS::read (ACE_STDIN, buf, sizeof buf)) > 0;
+ )
+ if (cli_stream.send_n (buf,
+ r_bytes,
+ 0) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("send_n")),
+ 1);
+
+ // Explicitly close the connection.
+ if (cli_stream.close () == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("close")),
+ -1);
+ return 0;
+}
+#else
+int ACE_TMAIN (int, ACE_TCHAR *[])
+{
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("your platform isn't configured to support TLI\n")),
+ 1);
+}
+#endif /* ACE_HAS_TLI */