You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
428 lines
27 KiB
428 lines
27 KiB
<!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>Server: src/webgameserver.c File Reference</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript">
|
|
$(document).ready(initResizable);
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
|
</head>
|
|
<body onload='searchBox.OnSelectItem(0);'>
|
|
<!-- Generated by Doxygen 1.7.3 -->
|
|
<script type="text/javascript"><!--
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
--></script>
|
|
<div id="top">
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td style="padding-left: 0.5em;">
|
|
<div id="projectname">Server <span id="projectnumber">0.0.1</span></div>
|
|
<div id="projectbrief">HTTP/REST server implementation</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div id="navrow1" class="tabs">
|
|
<ul class="tablist">
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
|
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
|
<li id="searchli">
|
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
alt=""/>
|
|
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
</span>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div id="navrow2" class="tabs2">
|
|
<ul class="tablist">
|
|
<li><a href="files.html"><span>File List</span></a></li>
|
|
<li><a href="globals.html"><span>Globals</span></a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
initNavTree('webgameserver_8c.html','');
|
|
</script>
|
|
<div id="doc-content">
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#define-members">Defines</a> |
|
|
<a href="#func-members">Functions</a> </div>
|
|
<div class="headertitle">
|
|
<h1>src/webgameserver.c File Reference</h1> </div>
|
|
</div>
|
|
<div class="contents">
|
|
<div class="textblock"><code>#include <unistd.h></code><br/>
|
|
<code>#include <stdlib.h></code><br/>
|
|
<code>#include <fcntl.h></code><br/>
|
|
<code>#include <sys/time.h></code><br/>
|
|
<code>#include <sys/resource.h></code><br/>
|
|
<code>#include <sys/types.h></code><br/>
|
|
<code>#include <sys/wait.h></code><br/>
|
|
<code>#include <sys/signal.h></code><br/>
|
|
<code>#include <sys/param.h></code><br/>
|
|
<code>#include <sys/stat.h></code><br/>
|
|
<code>#include <sys/mman.h></code><br/>
|
|
<code>#include <errno.h></code><br/>
|
|
<code>#include "server.h"</code><br/>
|
|
<code>#include "logger.h"</code><br/>
|
|
<code>#include "http/worker.h"</code><br/>
|
|
<code>#include "auth/ldap.h"</code><br/>
|
|
<code>#include "interface/class.h"</code><br/>
|
|
<code>#include "interface/logger.h"</code><br/>
|
|
<code>#include "utils/signalHandling.h"</code><br/>
|
|
<code>#include "utils/memory.h"</code><br/>
|
|
</div><div class="textblock"><div class="dynheader">
|
|
Include dependency graph for webgameserver.c:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><img src="webgameserver_8c__incl.png" border="0" usemap="#src_2webgameserver_8c" alt=""/></div>
|
|
<map name="src_2webgameserver_8c" id="src_2webgameserver_8c">
|
|
</map>
|
|
</div>
|
|
</div>
|
|
<p><a href="webgameserver_8c_source.html">Go to the source code of this file.</a></p>
|
|
<table class="memberdecls">
|
|
<tr><td colspan="2"><h2><a name="define-members"></a>
|
|
Defines</h2></td></tr>
|
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="webgameserver_8c.html#adc65839bf93b60b69f4c3cc69579cd5d">DEFAULT_SECS</a>   10</td></tr>
|
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="webgameserver_8c.html#a8e46f816094620164ba5207c0cc1c255">DEFAULT_USECS</a>   0</td></tr>
|
|
<tr><td colspan="2"><h2><a name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="webgameserver_8c.html#a037a87641df20cd07cf7ad9799c502a2">nullhandler</a> ()</td></tr>
|
|
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="webgameserver_8c.html#a29b0af1da2432bcc90721c0b62f4e660">daemonize</a> (void)</td></tr>
|
|
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="webgameserver_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
|
|
</table>
|
|
<hr/><a name="_details"></a><h2>Detailed Description</h2>
|
|
<div class="textblock"><dl class="author"><dt><b>Author:</b></dt><dd>Georg Hopp</dd></dl>
|
|
<p>Copyright (C) 2012 Georg Hopp</p>
|
|
<p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p>
|
|
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
|
|
<p>You should have received a copy of the GNU General Public License along with this program. If not, see <<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>>. </p>
|
|
|
|
<p>Definition in file <a class="el" href="webgameserver_8c_source.html">webgameserver.c</a>.</p>
|
|
</div><hr/><h2>Define Documentation</h2>
|
|
<a class="anchor" id="adc65839bf93b60b69f4c3cc69579cd5d"></a><!-- doxytag: member="webgameserver.c::DEFAULT_SECS" ref="adc65839bf93b60b69f4c3cc69579cd5d" args="" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">#define DEFAULT_SECS   10</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>Definition at line <a class="el" href="webgameserver_8c_source.html#l00049">49</a> of file <a class="el" href="webgameserver_8c_source.html">webgameserver.c</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a class="anchor" id="a8e46f816094620164ba5207c0cc1c255"></a><!-- doxytag: member="webgameserver.c::DEFAULT_USECS" ref="a8e46f816094620164ba5207c0cc1c255" args="" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">#define DEFAULT_USECS   0</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>Definition at line <a class="el" href="webgameserver_8c_source.html#l00052">52</a> of file <a class="el" href="webgameserver_8c_source.html">webgameserver.c</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<hr/><h2>Function Documentation</h2>
|
|
<a class="anchor" id="a29b0af1da2432bcc90721c0b62f4e660"></a><!-- doxytag: member="webgameserver.c::daemonize" ref="a29b0af1da2432bcc90721c0b62f4e660" args="(void)" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void daemonize </td>
|
|
<td>(</td>
|
|
<td class="paramtype">void </td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>Definition at line <a class="el" href="daemonize_8c_source.html#l00030">30</a> of file <a class="el" href="daemonize_8c_source.html">daemonize.c</a>.</p>
|
|
<div class="fragment"><pre class="fragment"> {
|
|
pid_t pid;
|
|
|
|
<span class="keywordflow">if</span> (0 > ((pid = fork()))) {
|
|
perror(<span class="stringliteral">"deamoinze[fork]"</span>);
|
|
exit(EXIT_FAILURE);
|
|
} <span class="keywordflow">else</span> <span class="keywordflow">if</span> (0 != pid) {
|
|
exit(EXIT_SUCCESS);
|
|
}
|
|
|
|
<span class="comment">// make new child session leader</span>
|
|
setsid();
|
|
|
|
<span class="comment">// connect all standard streams to /dev/null</span>
|
|
stderr = freopen(<span class="stringliteral">"/dev/null"</span>, <span class="stringliteral">"w"</span>, stderr);
|
|
stdin = freopen(<span class="stringliteral">"/dev/null"</span>, <span class="stringliteral">"r"</span>, stdin);
|
|
stdout = freopen(<span class="stringliteral">"/dev/null"</span>, <span class="stringliteral">"w"</span>, stdout);
|
|
}
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
<a class="anchor" id="ae66f6b31b5ad750f1fe042a706a4e3d4"></a><!-- doxytag: member="webgameserver.c::main" ref="ae66f6b31b5ad750f1fe042a706a4e3d4" args="()" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int main </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>Definition at line <a class="el" href="webgameserver_8c_source.html#l00059">59</a> of file <a class="el" href="webgameserver_8c_source.html">webgameserver.c</a>.</p>
|
|
<div class="fragment"><pre class="fragment">{
|
|
pid_t pid;
|
|
<span class="keywordtype">long</span> psize = sysconf(_SC_PAGESIZE);
|
|
<span class="keywordtype">int</span> status;
|
|
<span class="keywordtype">int</span> shm;
|
|
<span class="keyword">struct </span><a class="code" href="structrandval.html">randval</a> * <a class="code" href="structrandval.html#ada52f1346b93f8e296aa2488836311ec">value</a>;
|
|
|
|
<span class="keyword">struct </span>rlimit limit = {RLIM_INFINITY, RLIM_INFINITY};
|
|
setrlimit(RLIMIT_CPU, &limit);
|
|
|
|
getrlimit(RLIMIT_NOFILE, &limit);
|
|
limit.rlim_cur = limit.rlim_max;
|
|
setrlimit(RLIMIT_NOFILE, &limit);
|
|
|
|
<a class="code" href="signalHandling_8h.html#a1de31bdef82f181f8045b94ae0933916">init_signals</a>();
|
|
|
|
shm = shm_open(<span class="stringliteral">"/fooshm"</span>, O_RDWR|O_CREAT, S_IRWXU);
|
|
ftruncate(shm, psize);
|
|
|
|
<span class="keywordflow">switch</span>((pid = fork())) {
|
|
<span class="keywordflow">case</span> -1:
|
|
<span class="keywordflow">break</span>;
|
|
|
|
<span class="keywordflow">case</span> 0:
|
|
{
|
|
sigset_t block_these, pause_mask;
|
|
<span class="keyword">struct </span>sigaction s;
|
|
<span class="keyword">struct </span>itimerval interval;
|
|
|
|
value = mmap (0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structrandval.html">randval</a>), PROT_READ|PROT_WRITE,
|
|
MAP_SHARED, shm, 0);
|
|
value->timestamp = 0;
|
|
value->value = 0;
|
|
|
|
close(shm);
|
|
|
|
<span class="comment">// Block SIGALRM</span>
|
|
sigemptyset(&block_these);
|
|
sigaddset(&block_these, SIGALRM);
|
|
sigprocmask(SIG_BLOCK, &block_these, &pause_mask);
|
|
|
|
<span class="comment">// Set up handler for SIGALRM</span>
|
|
sigemptyset(&s.sa_mask);
|
|
sigaddset(&s.sa_mask, SIGINT);
|
|
s.sa_flags = 0;
|
|
s.sa_handler = <a class="code" href="webgameserver_8c.html#a037a87641df20cd07cf7ad9799c502a2">nullhandler</a>;
|
|
<span class="keywordflow">if</span> (sigaction(SIGALRM, &s, NULL) < 0) {
|
|
perror(<span class="stringliteral">"sigaction SIGALRM"</span>);
|
|
exit (1);
|
|
}
|
|
|
|
interval.it_value.tv_sec = <a class="code" href="webgameserver_8c.html#adc65839bf93b60b69f4c3cc69579cd5d">DEFAULT_SECS</a>;
|
|
interval.it_value.tv_usec = <a class="code" href="webgameserver_8c.html#a8e46f816094620164ba5207c0cc1c255">DEFAULT_USECS</a>;
|
|
interval.it_interval.tv_sec = <a class="code" href="webgameserver_8c.html#adc65839bf93b60b69f4c3cc69579cd5d">DEFAULT_SECS</a>;
|
|
interval.it_interval.tv_usec = <a class="code" href="webgameserver_8c.html#a8e46f816094620164ba5207c0cc1c255">DEFAULT_USECS</a>;
|
|
|
|
setitimer(ITIMER_REAL, &interval, NULL);
|
|
|
|
<span class="comment">// child</span>
|
|
<span class="keywordflow">while</span>(!<a class="code" href="signalHandling_8h.html#a960e985a396acaabb1bbed4f15668ade">doShutdown</a>) {
|
|
value->timestamp = time(NULL);
|
|
value->value = rand() % 100;
|
|
sigsuspend(&pause_mask);
|
|
}
|
|
|
|
_exit(EXIT_SUCCESS);
|
|
}
|
|
|
|
<span class="keywordflow">default</span>:
|
|
{
|
|
<a class="code" href="structLogger.html">Logger</a> logger;
|
|
<a class="code" href="structAuthLdap.html">AuthLdap</a> auth;
|
|
<a class="code" href="structHttpWorker.html">HttpWorker</a> worker;
|
|
<a class="code" href="structServer.html">Server</a> server;
|
|
|
|
value = mmap (0, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>), PROT_READ|PROT_WRITE,
|
|
MAP_SHARED, shm, 0);
|
|
|
|
shm_unlink(<span class="stringliteral">"/fooshm"</span>);
|
|
close(shm);
|
|
|
|
logger = <span class="keyword">new</span>(<a class="code" href="structLoggerSyslog.html">LoggerSyslog</a>, <a class="code" href="logger_2logger_8h.html#a63296c69f4b9bf51d6756a5d2c482d1ea30eb5eac34e7c2406c74fb78d9004f6c">LOGGER_DEBUG</a>);
|
|
auth = <span class="keyword">new</span>(<a class="code" href="structAuthLdap.html">AuthLdap</a>,
|
|
<span class="stringliteral">"ldap://localhost/"</span>,
|
|
<a class="code" href="memory_8h.html#a2a9234835facec8c1ebca59c214391e3" title="Const STRing Argument.">CSTRA</a>(<span class="stringliteral">"ou=user,dc=yabrog,dc=weird-web-workers,dc=org"</span>));
|
|
worker = <span class="keyword">new</span>(<a class="code" href="structHttpWorker.html">HttpWorker</a>, <span class="stringliteral">"testserver"</span>, value, auth);
|
|
server = <span class="keyword">new</span>(<a class="code" href="structServer.html">Server</a>, logger, worker, 11212, SOMAXCONN);
|
|
|
|
<span class="comment">//daemonize();</span>
|
|
<span class="keywordflow">if</span> (NULL != server) {
|
|
<a class="code" href="server_8h.html#a67a4d9073b80d8ae1459fb11ddd23675">serverRun</a>(server);
|
|
}
|
|
<span class="keywordflow">else</span> {
|
|
<a class="code" href="signalHandling_8h.html#a960e985a396acaabb1bbed4f15668ade">doShutdown</a> = 1;
|
|
kill(pid, SIGINT);
|
|
}
|
|
|
|
<span class="keywordflow">do</span> {
|
|
pid_t w;
|
|
|
|
w = waitpid(pid, &status, 0);
|
|
|
|
<span class="keywordflow">while</span> (w == -1) {
|
|
<span class="keywordflow">switch</span>(errno) {
|
|
<span class="keywordflow">case</span> EINTR: w = waitpid(pid, &status, 0);
|
|
<span class="keywordflow">break</span>;
|
|
<span class="keywordflow">case</span> ECHILD: perror(<span class="stringliteral">"no child"</span>);
|
|
<span class="comment">// DROP THROUGH</span>
|
|
<span class="keywordflow">default</span>: w = 0;
|
|
}
|
|
}
|
|
|
|
<span class="keywordflow">if</span> (0 < w) {
|
|
<span class="keywordflow">if</span> (WIFEXITED(status)) {
|
|
<a class="code" href="logger_2interface_2logger_8h.html#ae9f8662ec8b300dcfb5064906937553e">loggerLog</a>(logger, <a class="code" href="logger_2logger_8h.html#a63296c69f4b9bf51d6756a5d2c482d1ea3a56c2c000665930df74a9ebf9047316">LOGGER_INFO</a>,
|
|
<span class="stringliteral">"child exited, status=%d\n"</span>,
|
|
WEXITSTATUS(status));
|
|
} <span class="keywordflow">else</span> <span class="keywordflow">if</span> (WIFSIGNALED(status)) {
|
|
<a class="code" href="logger_2interface_2logger_8h.html#ae9f8662ec8b300dcfb5064906937553e">loggerLog</a>(logger, <a class="code" href="logger_2logger_8h.html#a63296c69f4b9bf51d6756a5d2c482d1ea3a56c2c000665930df74a9ebf9047316">LOGGER_INFO</a>,
|
|
<span class="stringliteral">"killed by signal %d\n"</span>,
|
|
WTERMSIG(status));
|
|
} <span class="keywordflow">else</span> <span class="keywordflow">if</span> (WIFSTOPPED(status)) {
|
|
<a class="code" href="logger_2interface_2logger_8h.html#ae9f8662ec8b300dcfb5064906937553e">loggerLog</a>(logger, <a class="code" href="logger_2logger_8h.html#a63296c69f4b9bf51d6756a5d2c482d1ea3a56c2c000665930df74a9ebf9047316">LOGGER_INFO</a>,
|
|
<span class="stringliteral">"stopped by signal %d\n"</span>,
|
|
WSTOPSIG(status));
|
|
} <span class="keywordflow">else</span> <span class="keywordflow">if</span> (WIFCONTINUED(status)) {
|
|
<a class="code" href="logger_2interface_2logger_8h.html#ae9f8662ec8b300dcfb5064906937553e">loggerLog</a>(logger, <a class="code" href="logger_2logger_8h.html#a63296c69f4b9bf51d6756a5d2c482d1ea3a56c2c000665930df74a9ebf9047316">LOGGER_INFO</a>, <span class="stringliteral">"continued\n"</span>);
|
|
}
|
|
}
|
|
} <span class="keywordflow">while</span> (!WIFEXITED(status) && !WIFSIGNALED(status));
|
|
|
|
<span class="keywordflow">if</span> (NULL != server) <span class="keyword">delete</span>(server);
|
|
<span class="keywordflow">if</span> (NULL != worker) <span class="keyword">delete</span>(worker);
|
|
<span class="keywordflow">if</span> (NULL != auth) <span class="keyword">delete</span>(auth);
|
|
<span class="keywordflow">if</span> (NULL != logger) <span class="keyword">delete</span>(logger);
|
|
}
|
|
|
|
<span class="keywordflow">break</span>;
|
|
}
|
|
|
|
<span class="keywordflow">return</span> 0;
|
|
}
|
|
</pre></div>
|
|
<p><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><img src="webgameserver_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.png" border="0" usemap="#webgameserver_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph" alt=""/></div>
|
|
<map name="webgameserver_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph" id="webgameserver_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph">
|
|
<area shape="rect" id="node3" href="signalHandling_8h.html#a1de31bdef82f181f8045b94ae0933916" title="init_signals" alt="" coords="104,5,192,33"/><area shape="rect" id="node7" href="logger_2interface_2logger_8h.html#ae9f8662ec8b300dcfb5064906937553e" title="loggerLog" alt="" coords="620,207,700,235"/><area shape="rect" id="node9" href="webgameserver_8c.html#a037a87641df20cd07cf7ad9799c502a2" title="nullhandler" alt="" coords="105,106,191,134"/><area shape="rect" id="node11" href="server_8h.html#a67a4d9073b80d8ae1459fb11ddd23675" title="serverRun" alt="" coords="107,233,189,261"/><area shape="rect" id="node5" href="signalHandling_8h.html#a64612b9588ed0fb05d70680db02b3630" title="terminate" alt="" coords="273,5,351,33"/><area shape="rect" id="node14" href="handle__accept_8c.html#abc50e74ce8e5c91817ad8cc1ca167541" title="serverHandleAccept" alt="" coords="241,207,383,235"/><area shape="rect" id="node20" href="poll_8c.html#ab102590167bdff8b5ab2f23069cfcbd3" title="serverPoll" alt="" coords="461,258,541,286"/><area shape="rect" id="node23" href="server_2read_8c.html#a97cbf012583a54dfd87f131233a18b0a" title="serverRead" alt="" coords="267,334,357,362"/><area shape="rect" id="node30" href="run_8c.html#ac275efebefdf1c64b30511daa008d3c1" title="serverWrite" alt="" coords="268,435,356,463"/><area shape="rect" id="node17" href="socket_8h.html#a45ec8fbdb035314da3d390fdcd6dc304" title="socketAccept" alt="" coords="451,207,552,235"/><area shape="rect" id="node26" href="close__conn_8c.html#ad721e61c8676f0b4c3b8fc401e26f266" title="serverCloseConn" alt="" coords="439,410,564,438"/><area shape="rect" id="node28" href="reader_8h.html#ad06d56b0fc045531cfbaf0bfc5468b83" title="streamReaderRead" alt="" coords="432,359,571,387"/><area shape="rect" id="node34" href="stream_2interface_2writer_8h.html#aabe113691016adfe02c4977daee560a0" title="streamWriterWrite" alt="" coords="437,511,565,539"/></map>
|
|
</div>
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a class="anchor" id="a037a87641df20cd07cf7ad9799c502a2"></a><!-- doxytag: member="webgameserver.c::nullhandler" ref="a037a87641df20cd07cf7ad9799c502a2" args="()" -->
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void nullhandler </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="memdoc">
|
|
|
|
<p>Definition at line <a class="el" href="webgameserver_8c_source.html#l00054">54</a> of file <a class="el" href="webgameserver_8c_source.html">webgameserver.c</a>.</p>
|
|
<div class="fragment"><pre class="fragment">{}
|
|
</pre></div>
|
|
<p><div class="dynheader">
|
|
Here is the caller graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><img src="webgameserver_8c_a037a87641df20cd07cf7ad9799c502a2_icgraph.png" border="0" usemap="#webgameserver_8c_a037a87641df20cd07cf7ad9799c502a2_icgraph" alt=""/></div>
|
|
<map name="webgameserver_8c_a037a87641df20cd07cf7ad9799c502a2_icgraph" id="webgameserver_8c_a037a87641df20cd07cf7ad9799c502a2_icgraph">
|
|
<area shape="rect" id="node3" href="webgameserver_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4" title="main" alt="" coords="141,5,192,33"/></map>
|
|
</div>
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="nav-path" class="navpath">
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="webgameserver_8c.html">webgameserver.c</a> </li>
|
|
<li class="footer">Generated on Wed Mar 28 2012 10:39:45 for Server by 
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </li>
|
|
</ul>
|
|
</div>
|
|
<!--- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Defines</a></div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
|
|
</body>
|
|
</html>
|