OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [net/] [khttpd/] [sockets.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 
3
kHTTPd -- the next generation
4
 
5
Basic socket functions
6
 
7
*/
8
/****************************************************************
9
 *      This program is free software; you can redistribute it and/or modify
10
 *      it under the terms of the GNU General Public License as published by
11
 *      the Free Software Foundation; either version 2, or (at your option)
12
 *      any later version.
13
 *
14
 *      This program is distributed in the hope that it will be useful,
15
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 *      GNU General Public License for more details.
18
 *
19
 *      You should have received a copy of the GNU General Public License
20
 *      along with this program; if not, write to the Free Software
21
 *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
 *
23
 ****************************************************************/
24
 
25
#include "prototypes.h"
26
#include <linux/kernel.h>
27
#include <linux/net.h>
28
#include <linux/version.h>
29
#include <linux/smp_lock.h>
30
#include <net/sock.h>
31
 
32
 
33
/*
34
 
35
MainSocket is shared by all threads, therefore it has to be
36
a global variable.
37
 
38
*/
39
struct socket *MainSocket=NULL;
40
 
41
 
42
int StartListening(const int Port)
43
{
44
        struct socket *sock;
45
        struct sockaddr_in sin;
46
        int error;
47
 
48
        EnterFunction("StartListening");
49
 
50
        /* First create a socket */
51
 
52
        error = sock_create(PF_INET,SOCK_STREAM,IPPROTO_TCP,&sock);
53
        if (error<0)
54
             (void)printk(KERN_ERR "Error during creation of socket; terminating\n");
55
 
56
 
57
 
58
        /* Now bind the socket */
59
 
60
        sin.sin_family       = AF_INET;
61
        sin.sin_addr.s_addr  = INADDR_ANY;
62
        sin.sin_port         = htons((unsigned short)Port);
63
 
64
        error = sock->ops->bind(sock,(struct sockaddr*)&sin,sizeof(sin));
65
        if (error<0)
66
        {
67
                (void)printk(KERN_ERR "kHTTPd: Error binding socket. This means that some other \n");
68
                (void)printk(KERN_ERR "        daemon is (or was a short time ago) using port %i.\n",Port);
69
                return 0;
70
        }
71
 
72
        /* Grrr... setsockopt() does this. */
73
        sock->sk->reuse   = 1;
74
 
75
        /* Now, start listening on the socket */
76
 
77
        /* I have no idea what a sane backlog-value is. 48 works so far. */
78
 
79
        error=sock->ops->listen(sock,48);
80
        if (error!=0)
81
                (void)printk(KERN_ERR "kHTTPd: Error listening on socket \n");
82
 
83
        MainSocket = sock;
84
 
85
        LeaveFunction("StartListening");
86
        return 1;
87
}
88
 
89
void StopListening(void)
90
{
91
        struct socket *sock;
92
 
93
        EnterFunction("StopListening");
94
        if (MainSocket==NULL) return;
95
 
96
        sock=MainSocket;
97
        MainSocket = NULL;
98
        sock_release(sock);
99
 
100
        LeaveFunction("StopListening");
101
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.