在 socket connect/bind 所使用 sockaddr_in, 一定要记得 bzero...
struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
因为 sockaddr_in 的定义是
struct in_addr { in_addr_t s_addr; /* 32-bit IPv4 address */ /* network byte ordered */ }; struct sockaddr_in { uint8_t sin_len; /* length of structure (16) */ sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* 16-bit TCP or UDP port number */ /* network byte ordered */ struct in_addr sin_addr; /* 32-bit IPv4 address */ /* network byte ordered */ char sin_zero[8]; /* unused */ };
可能, bind() 函数要求 sin_zero 必须全清空为 0.
bzero只是碰巧起到了同样的效果而已,然而完全体现不出用意在何
另外INETADDR_ANY只是为了从多IP主机的哪个IP连接上来都能接受,这是常见情况。要是非常见情况,只接受从特定IP连上来的连接呢?你bzero? Reply