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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [inet/] [rpc/] [bindresvport.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/*
2
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3
 * unrestricted use provided that this legend is included on all tape
4
 * media and as a part of the software program in whole or part.  Users
5
 * may copy or modify Sun RPC without charge, but are not authorized
6
 * to license or distribute it to anyone else except as part of a product or
7
 * program developed by the user.
8
 *
9
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12
 *
13
 * Sun RPC is provided with no support and without any obligation on the
14
 * part of Sun Microsystems, Inc. to assist in its use, correction,
15
 * modification or enhancement.
16
 *
17
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19
 * OR ANY PART THEREOF.
20
 *
21
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22
 * or profits or other special, indirect and consequential damages, even if
23
 * Sun has been advised of the possibility of such damages.
24
 *
25
 * Sun Microsystems, Inc.
26
 * 2550 Garcia Avenue
27
 * Mountain View, California  94043
28
 */
29
/*
30
 * Copyright (c) 1987 by Sun Microsystems, Inc.
31
 */
32
 
33
#define __FORCE_GLIBC
34
#include <features.h>
35
 
36
#include <errno.h>
37
#include <unistd.h>
38
#include <string.h>
39
#include <sys/types.h>
40
#include <sys/socket.h>
41
#include <netinet/in.h>
42
 
43
/*
44
 * Bind a socket to a privileged IP port
45
 */
46
int
47
bindresvport (int sd, struct sockaddr_in *sin)
48
{
49
  int res;
50
  static short port;
51
  struct sockaddr_in myaddr;
52
  int i;
53
 
54
#define STARTPORT 600
55
#define ENDPORT (IPPORT_RESERVED - 1)
56
#define NPORTS  (ENDPORT - STARTPORT + 1)
57
 
58
  if (sin == (struct sockaddr_in *) 0)
59
    {
60
      sin = &myaddr;
61
      bzero (sin, sizeof (*sin));
62
      sin->sin_family = AF_INET;
63
    }
64
  else if (sin->sin_family != AF_INET)
65
    {
66
      __set_errno (EPFNOSUPPORT);
67
      return -1;
68
    }
69
 
70
  if (port == 0)
71
    {
72
      port = (getpid () % NPORTS) + STARTPORT;
73
    }
74
  res = -1;
75
  __set_errno (EADDRINUSE);
76
 
77
  for (i = 0; i < NPORTS && res < 0 && errno == EADDRINUSE; ++i)
78
    {
79
      sin->sin_port = htons (port);
80
      if (++port > ENDPORT)
81
        {
82
          port = STARTPORT;
83
        }
84
      res = bind(sd, (struct sockaddr *)sin, sizeof(struct sockaddr_in));
85
    }
86
 
87
  return res;
88
}

powered by: WebSVN 2.1.0

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