Click here to Skip to main content
15,897,718 members
Articles / Programming Languages / C

A Generic C-Language TCP Client Application

Rate me:
Please Sign up or sign in to vote.
3.67/5 (2 votes)
9 May 2010CPOL4 min read 29.1K   793   20  
A library for writing simple TCP client applications
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>TcpClient2: config.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
<h1>config.h</h1><a href="config_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/// @source      config.h</span>
<a name="l00002"></a>00002 <span class="comment"></span><span class="comment">/// @description Common configuration options &amp; declarations.</span>
<a name="l00003"></a>00003 <span class="comment"></span><span class="comment">//  See licensing information in the file README.TXT.</span>
<a name="l00004"></a>00004 
<a name="l00005"></a>00005 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00006"></a>00006 <span class="preprocessor">#ifndef __CONFIG_H__</span>
<a name="l00007"></a>00007 <span class="preprocessor"></span><span class="preprocessor">#define __CONFIG_H__</span>
<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00009"></a>00009 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00011"></a>00011 <span class="preprocessor">#endif</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00013"></a>00013 
<a name="l00014"></a><a class="code" href="config_8h.html#aac81acd8a44c0ba68aac54b1527f0c52">00014</a> <span class="preprocessor">#define TC2_MAJOR_VERSION 1</span>
<a name="l00015"></a><a class="code" href="config_8h.html#ae24d1d96aa204d56c65e98b531711d78">00015</a> <span class="preprocessor"></span><span class="preprocessor">#define TC2_MINOR_VERSION 0</span>
<a name="l00016"></a><a class="code" href="config_8h.html#af4a632a60f448dd2425539ab54eaea7a">00016</a> <span class="preprocessor"></span><span class="preprocessor">#define TC2_MICRO_VERSION 0</span>
<a name="l00017"></a><a class="code" href="config_8h.html#a0172bc505bdb6ea5e6bee78276914235">00017</a> <span class="preprocessor"></span><span class="preprocessor">#define TC2_VERSION  &quot;1.0.0&quot;</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">/// Configuration macro used to specify the platform: Windows or Linux. </span>
<a name="l00022"></a><a class="code" href="config_8h.html#a8d5c6ee38b4e7a70400ebf121943dc3c">00022</a> <span class="comment"></span><span class="preprocessor">#define PLATFORM(x) PLATFORM_ ## x</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00024"></a>00024 <span class="comment">/// Generic status codes for success or error.</span>
<a name="l00025"></a>00025 <span class="comment"></span><span class="keyword">enum</span>
<a name="l00026"></a>00026 {
<a name="l00027"></a><a class="code" href="config_8h.html#adf764cbdea00d65edcd07bb9953ad2b7a45a62cf997dfe230d37c70b39626058c">00027</a>    <a class="code" href="config_8h.html#adf764cbdea00d65edcd07bb9953ad2b7a45a62cf997dfe230d37c70b39626058c" title="the generic OK value">ST_OK</a> ,     <span class="comment">///&lt; the generic OK value</span>
<a name="l00028"></a><a class="code" href="config_8h.html#adf764cbdea00d65edcd07bb9953ad2b7aeba238d654a503a412ebac861c342bf9">00028</a> <span class="comment"></span>   <a class="code" href="config_8h.html#adf764cbdea00d65edcd07bb9953ad2b7aeba238d654a503a412ebac861c342bf9" title="the generic ERROR value">ST_ERROR</a>    <span class="comment">///&lt; the generic ERROR value</span>
<a name="l00029"></a>00029 <span class="comment"></span>};
<a name="l00030"></a>00030 <span class="comment"></span>
<a name="l00031"></a>00031 <span class="comment">/// Logical values.</span>
<a name="l00032"></a>00032 <span class="comment"></span><span class="keyword">enum</span>
<a name="l00033"></a>00033 {
<a name="l00034"></a><a class="code" href="config_8h.html#a99fb83031ce9923c84392b4e92f956b5aad1695d94d8ecd3ec72961ed1700f709">00034</a>    <a class="code" href="config_8h.html#a99fb83031ce9923c84392b4e92f956b5aad1695d94d8ecd3ec72961ed1700f709" title="the logical FALSE value">ST_FALSE</a> ,  <span class="comment">///&lt; the logical FALSE value</span>
<a name="l00035"></a><a class="code" href="config_8h.html#a99fb83031ce9923c84392b4e92f956b5ae24e677b66b57a70ec151629f444a7be">00035</a> <span class="comment"></span>   <a class="code" href="config_8h.html#a99fb83031ce9923c84392b4e92f956b5ae24e677b66b57a70ec151629f444a7be" title="the logical TRUE value">ST_TRUE</a>     <span class="comment">///&lt; the logical TRUE value </span>
<a name="l00036"></a>00036 <span class="comment"></span>};
<a name="l00037"></a>00037 <span class="comment"></span>
<a name="l00038"></a>00038 <span class="comment">/// A kind of logical values.</span>
<a name="l00039"></a>00039 <span class="comment"></span><span class="keyword">enum</span>
<a name="l00040"></a>00040 {
<a name="l00041"></a><a class="code" href="config_8h.html#abc6126af1d45847bc59afa0aa3216b04ad8cd843875bccc30df286ab409108a93">00041</a>    <a class="code" href="config_8h.html#abc6126af1d45847bc59afa0aa3216b04ad8cd843875bccc30df286ab409108a93" title="a kind of logical FALSE value">ST_NO</a>,   <span class="comment">///&lt; a kind of logical FALSE value</span>
<a name="l00042"></a><a class="code" href="config_8h.html#abc6126af1d45847bc59afa0aa3216b04a0108a191228e9a6c99bd7ce8108c56c8">00042</a> <span class="comment"></span>   <a class="code" href="config_8h.html#abc6126af1d45847bc59afa0aa3216b04a0108a191228e9a6c99bd7ce8108c56c8" title="a kind of logical true value">ST_YES</a>   <span class="comment">///&lt; a kind of logical true value</span>
<a name="l00043"></a>00043 <span class="comment"></span>};
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="preprocessor">#ifndef __cplusplus</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="comment">// assumes it does no harm...</span>
<a name="l00047"></a><a class="code" href="config_8h.html#a6e2560c92901098cb3cd008a79dcdeba">00047</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="config_8h.html#a6e2560c92901098cb3cd008a79dcdeba" title="For compatibility with C++.">bool</a>; <span class="comment">///&lt; For compatibility with C++ </span>
<a name="l00048"></a>00048 <span class="comment"></span><span class="comment"></span>
<a name="l00049"></a>00049 <span class="comment">/// Fake C++ logical values</span>
<a name="l00050"></a><a class="code" href="config_8h.html#adc29c2ff13d900c2f185ee95427fb06ca08f175a5505a10b9ed657defeb050e4b">00050</a> <span class="comment"></span><span class="keyword">enum</span> { <span class="keyword">false</span>, <span class="keyword">true</span> };
<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span>
<a name="l00053"></a><a class="code" href="config_8h.html#a0f128c3e0c83721af0220c00554e9c4e">00053</a> <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="config_8h.html#a0f128c3e0c83721af0220c00554e9c4e" title="const char abbreviation">cchar</a>;      <span class="comment">///&lt; const char abbreviation</span>
<a name="l00054"></a><a class="code" href="config_8h.html#a65f85814a8290f9797005d3b28e7e5fc">00054</a> <span class="comment"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="config_8h.html#a65f85814a8290f9797005d3b28e7e5fc" title="unsigned char abbreviation">uchar</a>;   <span class="comment">///&lt; unsigned char abbreviation</span>
<a name="l00055"></a><a class="code" href="config_8h.html#a91ad9478d81a7aaf2593e8d9c3d06a14">00055</a> <span class="comment"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="config_8h.html#a91ad9478d81a7aaf2593e8d9c3d06a14" title="unsigned int abbreviation">uint</a>;     <span class="comment">///&lt; unsigned int abbreviation</span>
<a name="l00056"></a><a class="code" href="config_8h.html#a718b4eb2652c286f4d42dc18a8e71a1a">00056</a> <span class="comment"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="config_8h.html#a718b4eb2652c286f4d42dc18a8e71a1a" title="unsigned long abbreviation">ulong</a>;   <span class="comment">///&lt; unsigned long abbreviation</span>
<a name="l00057"></a><a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69">00057</a> <span class="comment"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a>; <span class="comment">///&lt; unsigned short abbreviation</span>
<a name="l00058"></a>00058 <span class="comment"></span>
<a name="l00059"></a>00059 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00060"></a>00060 
<a name="l00061"></a>00061 <span class="preprocessor">#ifdef _WIN32</span>
<a name="l00062"></a>00062 <span class="preprocessor"></span>
<a name="l00063"></a>00063 <span class="preprocessor">#define PLATFORM_Windows 1</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span>
<a name="l00065"></a>00065 <span class="preprocessor">#define IF_WINDOWS(x) x</span>
<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define IF_LINUX(x)</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span>
<a name="l00068"></a>00068 <span class="comment">// // enlarges the maximum number of sockets in type fd_set</span>
<a name="l00069"></a>00069 <span class="comment">// (not needed for client application)</span>
<a name="l00070"></a>00070 <span class="comment">// #define FD_SETSIZE 512</span>
<a name="l00071"></a>00071 
<a name="l00072"></a>00072 <span class="comment">// needed for functions exported from a dll</span>
<a name="l00073"></a>00073 <span class="preprocessor">#ifdef TC2_EXPORTS</span>
<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define TC2API __declspec(dllexport)</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define TC2API __declspec(dllimport)</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span>
<a name="l00079"></a>00079 <span class="comment">// disable because this forces us to use non-standard functions</span>
<a name="l00080"></a>00080 <span class="preprocessor">#define _CRT_SECURE_NO_WARNINGS</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span>
<a name="l00082"></a>00082 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00083"></a>00083 
<a name="l00084"></a>00084 <span class="preprocessor">#elif __linux__</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span>
<a name="l00086"></a>00086 <span class="preprocessor">#define PLATFORM_Linux 1</span>
<a name="l00087"></a>00087 <span class="preprocessor"></span>
<a name="l00088"></a>00088 <span class="preprocessor">#define IF_WINDOWS(x)</span>
<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define IF_LINUX(x) x</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span>
<a name="l00091"></a>00091 <span class="preprocessor">#define TC2API </span><span class="comment">/* nothing */</span>
<a name="l00092"></a>00092 
<a name="l00093"></a>00093 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00094"></a>00094 
<a name="l00095"></a>00095 <span class="preprocessor">#else</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#error &quot;unsupported platform&quot;</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span>
<a name="l00098"></a>00098 <span class="preprocessor">#endif</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span>
<a name="l00100"></a>00100 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00101"></a>00101 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>} <span class="comment">// #ifdef __cplusplus</span>
<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00105"></a>00105 <span class="preprocessor">#endif // __CONFIG_H__</span>
<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="comment">// -----------------------------------------------------------------------------</span>
</pre></div></div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Sat May 8 16:16:35 2010 for TcpClient2 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
zvx
Software Developer
Brazil Brazil
I'm a long-time software developer living in Brazil.

I've been developing software for retail and banking automation in C/C++ for many years now. In the old days I even did some COBOL programming, and some assembly for the 8080.

My experience ranges from low level software such as interface code for serial devices for DOS and Windows (bar code scanners, printers, cash dispensers, etc) and goes to writing end user applications for POS terminals and bank ATMs. In between I've done a great deal of TCP/IP programming using the basic Berkeley sockets interface, which is my main interest nowadays.

Comments and Discussions