<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ilianko.com/index.php?action=history&amp;feed=atom&amp;title=Socket</id>
	<title>Socket - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ilianko.com/index.php?action=history&amp;feed=atom&amp;title=Socket"/>
	<link rel="alternate" type="text/html" href="https://ilianko.com/index.php?title=Socket&amp;action=history"/>
	<updated>2026-05-13T13:02:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>https://ilianko.com/index.php?title=Socket&amp;diff=2977&amp;oldid=prev</id>
		<title>Anko at 08:22, 23 June 2012</title>
		<link rel="alternate" type="text/html" href="https://ilianko.com/index.php?title=Socket&amp;diff=2977&amp;oldid=prev"/>
		<updated>2012-06-23T08:22:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:22, 23 June 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Internet programming]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Anko</name></author>
		
	</entry>
	<entry>
		<id>https://ilianko.com/index.php?title=Socket&amp;diff=2975&amp;oldid=prev</id>
		<title>Anko at 08:00, 23 June 2012</title>
		<link rel="alternate" type="text/html" href="https://ilianko.com/index.php?title=Socket&amp;diff=2975&amp;oldid=prev"/>
		<updated>2012-06-23T08:00:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:00, 23 June 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot; &gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Интернет &lt;/del&gt;сървър чака връзка на порт 3914&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;мрежов &lt;/ins&gt;сървър чака връзка на порт 3914&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Anko</name></author>
		
	</entry>
	<entry>
		<id>https://ilianko.com/index.php?title=Socket&amp;diff=2974&amp;oldid=prev</id>
		<title>Anko at 08:00, 23 June 2012</title>
		<link rel="alternate" type="text/html" href="https://ilianko.com/index.php?title=Socket&amp;diff=2974&amp;oldid=prev"/>
		<updated>2012-06-23T08:00:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:00, 23 June 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot; &gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Изпращане приемане&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Интернет сървър чака връзка на порт 3914&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Anko</name></author>
		
	</entry>
	<entry>
		<id>https://ilianko.com/index.php?title=Socket&amp;diff=2973&amp;oldid=prev</id>
		<title>Anko: Created page with &quot;http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html   Изпращане приемане &lt;code&gt;&lt;pre&gt;  /***************************************************************\ ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://ilianko.com/index.php?title=Socket&amp;diff=2973&amp;oldid=prev"/>
		<updated>2012-06-23T07:57:19Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html   Изпращане приемане &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;  /***************************************************************\ ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Изпращане приемане&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************************\&lt;br /&gt;
 * &lt;br /&gt;
 * server.c -- Hello world! socket connection&lt;br /&gt;
 * &lt;br /&gt;
 * &lt;br /&gt;
 * source: http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html&lt;br /&gt;
 * &lt;br /&gt;
 * edited by: ilianko&lt;br /&gt;
\***************************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;
#include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt; // child process&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PORT &amp;quot;3491&amp;quot;  // the port users will be connecting to&lt;br /&gt;
&lt;br /&gt;
#define BACKLOG 10     // how many pending connections queue will hold&lt;br /&gt;
#define MAXDATASIZE 100&lt;br /&gt;
&lt;br /&gt;
void sigchld_handler(int s)&lt;br /&gt;
{&lt;br /&gt;
    while(waitpid(-1, NULL, WNOHANG) &amp;gt; 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// get sockaddr, IPv4 or IPv6:&lt;br /&gt;
void *get_in_addr(struct sockaddr *sa)&lt;br /&gt;
{&lt;br /&gt;
    if (sa-&amp;gt;sa_family == AF_INET) &lt;br /&gt;
    {&lt;br /&gt;
        return &amp;amp;(((struct sockaddr_in*)sa)-&amp;gt;sin_addr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return &amp;amp;(((struct sockaddr_in6*)sa)-&amp;gt;sin6_addr);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    int sockfd, new_fd;  // listen on sock_fd, new connection on new_fd&lt;br /&gt;
    &lt;br /&gt;
    struct addrinfo hints, *servinfo, *p;&lt;br /&gt;
    &lt;br /&gt;
    struct sockaddr_storage their_addr; // connector's address information&lt;br /&gt;
    &lt;br /&gt;
    socklen_t sin_size;&lt;br /&gt;
    &lt;br /&gt;
    struct sigaction sa;&lt;br /&gt;
    &lt;br /&gt;
    int yes=1;&lt;br /&gt;
    char s[INET6_ADDRSTRLEN];&lt;br /&gt;
    int rv, numbytes;  &lt;br /&gt;
    char buf[MAXDATASIZE];&lt;br /&gt;
    &lt;br /&gt;
    memset(&amp;amp;hints, 0, sizeof hints);&lt;br /&gt;
    hints.ai_family = AF_UNSPEC;&lt;br /&gt;
    hints.ai_socktype = SOCK_STREAM;&lt;br /&gt;
    hints.ai_flags = AI_PASSIVE; // use my IP&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    if ((rv = getaddrinfo(NULL, PORT, &amp;amp;hints, &amp;amp;servinfo)) != 0) &lt;br /&gt;
    {&lt;br /&gt;
        fprintf(stderr, &amp;quot;getaddrinfo: %s\n&amp;quot;, gai_strerror(rv));&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // loop through all the results and bind to the first we can&lt;br /&gt;
    for(p = servinfo; p != NULL; p = p-&amp;gt;ai_next) &lt;br /&gt;
    {&lt;br /&gt;
        if ((sockfd = socket(p-&amp;gt;ai_family, p-&amp;gt;ai_socktype, p-&amp;gt;ai_protocol)) == -1)&lt;br /&gt;
        {&lt;br /&gt;
            perror(&amp;quot;server: socket&amp;quot;);&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &amp;amp;yes, sizeof(int)) == -1)&lt;br /&gt;
        {&lt;br /&gt;
            perror(&amp;quot;setsockopt&amp;quot;);&lt;br /&gt;
            exit(1);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (bind(sockfd, p-&amp;gt;ai_addr, p-&amp;gt;ai_addrlen) == -1)&lt;br /&gt;
        {&lt;br /&gt;
            close(sockfd);&lt;br /&gt;
            perror(&amp;quot;server: bind&amp;quot;);&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (p == NULL)  &lt;br /&gt;
    {&lt;br /&gt;
        fprintf(stderr, &amp;quot;server: failed to bind\n&amp;quot;);&lt;br /&gt;
        return 2;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    freeaddrinfo(servinfo); // all done with this structure&lt;br /&gt;
&lt;br /&gt;
    if (listen(sockfd, BACKLOG) == -1)&lt;br /&gt;
    {&lt;br /&gt;
        perror(&amp;quot;listen&amp;quot;);&lt;br /&gt;
        exit(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sa.sa_handler = sigchld_handler; // reap all dead processes&lt;br /&gt;
    sigemptyset(&amp;amp;sa.sa_mask);&lt;br /&gt;
    sa.sa_flags = SA_RESTART;&lt;br /&gt;
    &lt;br /&gt;
    if (sigaction(SIGCHLD, &amp;amp;sa, NULL) == -1) &lt;br /&gt;
    {&lt;br /&gt;
        perror(&amp;quot;sigaction&amp;quot;);&lt;br /&gt;
        exit(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;server: waiting for connections...\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    while(1) // main accept() loop &lt;br /&gt;
    {  &lt;br /&gt;
        sin_size = sizeof their_addr;&lt;br /&gt;
        &lt;br /&gt;
        //file descriptor of the new connection&lt;br /&gt;
        new_fd = accept(sockfd, (struct sockaddr *)&amp;amp;their_addr, &amp;amp;sin_size);&lt;br /&gt;
        &lt;br /&gt;
        if (new_fd == -1)&lt;br /&gt;
        {&lt;br /&gt;
            perror(&amp;quot;accept&amp;quot;);&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //convert IP address from network form to printable (x.x.x.x) form&lt;br /&gt;
        inet_ntop(their_addr.ss_family,&lt;br /&gt;
            get_in_addr((struct sockaddr *)&amp;amp;their_addr),&lt;br /&gt;
            s, sizeof s);&lt;br /&gt;
        printf(&amp;quot;server: got connection from %s\n&amp;quot;, s);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        if (!fork()) // this is the child process&lt;br /&gt;
        { &lt;br /&gt;
            close(sockfd); // child doesn't need the listener&lt;br /&gt;
            &lt;br /&gt;
            if (!fork())&lt;br /&gt;
            {&lt;br /&gt;
				scanf(&amp;quot;%s&amp;quot;, buf);&lt;br /&gt;
				while(1)&lt;br /&gt;
				{&lt;br /&gt;
		          		&lt;br /&gt;
				  if (send(new_fd, buf, strlen(buf), 0) == -1)&lt;br /&gt;
                perror(&amp;quot;send&amp;quot;);&lt;br /&gt;
                scanf(&amp;quot;%s&amp;quot;, buf);&lt;br /&gt;
			    }&lt;br /&gt;
            &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            if (!fork())&lt;br /&gt;
            {    &lt;br /&gt;
              while(1)&lt;br /&gt;
              {  &lt;br /&gt;
				  if ((numbytes = recv(new_fd, buf, MAXDATASIZE-1, 0)) == -1)&lt;br /&gt;
                  {&lt;br /&gt;
                     perror(&amp;quot;recv&amp;quot;);&lt;br /&gt;
                     exit(1);&lt;br /&gt;
                  }&lt;br /&gt;
			      buf[numbytes] = '\0';&lt;br /&gt;
			      printf(&amp;quot;%s\n&amp;quot;,buf);&lt;br /&gt;
			   }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            close(new_fd);&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        close(new_fd);  // parent doesn't need this&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:C Справочник]]&lt;/div&gt;</summary>
		<author><name>Anko</name></author>
		
	</entry>
</feed>