套接字编程权限被拒绝

时间:2013-12-05 09:59:48

标签: c sockets

以下代码是TCP服务器程序,只需将“HELLO !!”发送回客户端。

当我使用端口80运行服务器时,将返回bind()Permission denied

端口12345没问题。

如何在此服务器程序中使用端口80?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int
main(){
    int sock0;
    struct sockaddr_in addr;
    struct sockaddr_in client;
    int len;
    int sock;
    char *message;
    message = "HELLO !!";
    sock0 = socket(AF_INET,SOCK_STREAM,0);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    inet_pton(AF_INET,"127.0.0.1",&addr,sizeof(addr));
    bind(sock0,(struct sockaddr *)&addr,sizeof(addr));
    perror("bind");
    len = sizeof(client);
    sock = accept(sock0,(struct sockaddr *)&client,&len);
    perror("accept");
    write(sock,message,sizeof(message));
    perror("write");
    close(sock);
    return 0;
}

3 个答案:

答案 0 :(得分:21)

1024以下的端口被视为“特权”,并且只能与具有同等权限的用户绑定(读取: root )。

任何人都可以“免费使用”1024以上的任何内容。

OT:您可能已经知道这一点,但您的示例中的端口是HTTP Web服务器的端口。任何收听此端口的内容也应该说HTTP。一个简单的“你好世界”是不够的。 ; - )

答案 1 :(得分:8)

只允许root用户绑定到端口&lt; = 1024.每个端口&gt; 1024可以被普通用户绑定。

尝试以root身份或sudo执行您的程序。

答案 2 :(得分:4)

您必须使用超级用户帐户(root)运行您的应用程序

使用sudo命令

运行您的应用程序