Why I can't bind the 1023 port?

Daniel Lao laodx at gzjpg.com
Tue Jun 11 12:18:34 EST 2002

I recently met some trouble with the "rcp" command. My "rcp" could not work
even if I have correctly configure the remote host.
When I run rcp in my local host, it print "Permission deny" to the terminal.

So I re-compiled rcp and debugged it by GDB. I found that it fail while tried to
bind the 1023 port for connecting with the remote rshd.

I though the 1023 port might be protected, and I wrote a program as below:

--- begin ---
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
extern int errno;

int main (int argc, char **argv)
    int s, rv;
    unsigned short port = 1023;
    struct sockaddr_in sin;

    s = socket (AF_INET, SOCK_STREAM, 0);
    if (s < 0)
        perror ("socket");
        return errno;

    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = INADDR_ANY;
    sin.sin_port = htons (port);
    rv = bind (s, (struct sockaddr *) &sin, sizeof (sin));
    if (rv < 0)
        perror ("bind");
        return errno;

--- end ---

The running result was that I could not bind these ports: 1023, 1022, ...
but it was success in bind 1024 port.
And while I su to as the super-user, I could bind all these ports!
I am wondering if the ports were really protected, and how can I use the ports?

Should anyone be kind to give me some advise?

Daniel Lao
2002-06-11 10:17:58

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

More information about the Linuxppc-dev mailing list