Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误端口上的Linux套接字绑定_C_Linux_Sockets - Fatal编程技术网

C 错误端口上的Linux套接字绑定

C 错误端口上的Linux套接字绑定,c,linux,sockets,C,Linux,Sockets,代码如下: int main(int argc, char **argv) { int listener_socket, new_socket; struct sockaddr_in server_address; pthread_t player_queue_processing; pthread_attr_t attr; Network_Code wait_message = WAIT; Network_Code incoming_messag

代码如下:

int main(int argc, char **argv)
{
    int listener_socket, new_socket;
    struct sockaddr_in server_address;
    pthread_t player_queue_processing;
    pthread_attr_t attr;
    Network_Code wait_message = WAIT;
    Network_Code incoming_message;

    if(pthread_attr_init(&attr) != 0){
        perror("Error initializing thread attributes");
        return 1;
    }

    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    if(pthread_create(&player_queue_processing, &attr, run, NULL) != 0){
        perror("Error creating thread");
        return 1;
    }

    if((listener_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        perror("Error creating socket");
        return 1;
    }

    if((player_queue = qu_allocate()) == NULL){
        perror("Error creating player queue");
        return 1;
    }

    memset(&server_address, 0, sizeof server_address);

    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = INADDR_ANY;
    server_address.sin_port = htons(449);

    printf("Listening on port: %d\n", ntohs(server_address.sin_port));

    bind(listener_socket, (struct sockaddr*)&server_address, sizeof server_address);

    if(listen(listener_socket, BACKLOG) == -1){
        perror("Listen");
        return 1;
    }

    while(1){
        new_socket = accept(listener_socket, (struct sockaddr*)NULL, NULL);

        read(new_socket, &incoming_message, sizeof incoming_message);

        if(incoming_message != I_WANT_TO_PLAY){
            close(new_socket);
            continue;
        }

        write(new_socket, &wait_message, sizeof wait_message);

        if(qu_enqueue(player_queue, (void *)(size_t)new_socket) == QU_ERROR)
            perror("Error enqueuing player");
    }
}
以及
netstat-tulpn所报告的内容

tcp        0      0 0.0.0.0:48577           0.0.0.0:*               LISTEN
当客户端使用端口48577时,它可以工作。问题是,即使我正在调用
htons()
,服务器绑定到错误的端口。为什么会这样


每次端口更改时,我都重新启动了多次。我正在运行Debian GNU/Linux jessie/sid 64位

显示所有相关代码。您必须将sin_端口更改到其他地方,可能是零,或者您正在绑定到另一个结构。449和48577与htons()无关。在向我们展示所有代码之前,请删除所有与问题无关的位。请给我们一个简短完整的程序来演示错误。有关详细信息,请参阅或。您没有检查bind()的结果。这样做,并报告您遇到的错误。您还需要注意read()返回的值。这里没有错误检查,也没有流结束检查,并且您假设它已填充缓冲区。@EJP您是对的错误被拒绝了权限,因此您需要使用一个大于1024的端口,或者以root用户身份运行,但是端口449仍然是保留的,所以不要使用它。