我终于解决了问题,但我仍然不知道它为什么会起作用。 我找到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;
}
答案 0 :(得分:4)
sin_port
是一个16位值,您要为其分配一个32位值。因此,低位被切断,使sin_port
为0.将其打印出来并查看。
您可以使用htons()
代替htonl()
进行修复,正如任何教程所示。