我想绑定到特定端口,但端口仍然是随机的

时间:2015-12-20 09:20:10

标签: c linux sockets bind

我终于解决了问题,但我仍然不知道它为什么会起作用。 我找到htons()来替换htonl()。 这是代码。

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

int main () {
    struct sockaddr_in addr;
    int fd;

    memset(&addr, 0, sizeof(addr));

    addr.sin_family = PF_INET;
    addr.sin_port = htonl(11211);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);

    fd = socket(AF_INET, SOCK_STREAM, 0);
    bind(fd, (struct sockaddr*)(&addr), sizeof(struct sockaddr));
    listen(fd, 5);

    sleep(1000);

    return 0;
}

1 个答案:

答案 0 :(得分:4)

sin_port是一个16位值,您要为其分配一个32位值。因此,低位被切断,使sin_port为0.将其打印出来并查看。

您可以使用htons()代替htonl()进行修复,正如任何教程所示。