unix socket编程绑定IPv4地址到套接字的问题
描述问题
IPv4的套接字地址:
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr; /* 无符号32为整数 */
};
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
按道理这样绑定IP地址应该是等价的。
方式一:
int listenfd;
struct sockaddr_in servaddr;
struct in_addr addr;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(40001);
inet_aton("0.0.0.0", &addr);
servaddr.sin_addr = addr;
printf("%d\n", servaddr.sin_addr.s_addr);
printf("%s\n", inet_ntoa(servaddr.sin_addr));
if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
printf("bind error\n");
}
方式二:
...
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
...
但是方式一调用bind
的时候返回值为-1,方式二返回值为0,这不应该啊。
方式一输出:
zhang@zhang-Latitude-3340:~/diy/unp$ ./a.out
0
0.0.0.0
3
方式二输出:
zhang@zhang-Latitude-3340:~/diy/unp$ ./a.out
0
0.0.0.0
bind error
3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论