我正在尝试编写一些套接字,因此,在服务器端,我使用 htonl(INADDR_ANY) 。在我理解的范围内,在我看来这个函数会生成一个随机 IP(我说得对吗?)。事实上,我想用我的 localhost 绑定(bind)我的套接字。但是如果我运行这个

printf("%d",htonl(INADDR_ANY));

我得到 0 作为返回值。有人可以带来一些解释吗?

最佳答案

  • bind() of INADDR_ANY NOT “随机生成IP它 binds the socket to all available interfaces
  • 对于服务器,您通常希望绑定(bind)到所有接口(interface)——而不仅仅是“本地主机”。
  • 如果您只想将套接字绑定(bind)到本地主机,则语法为 my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1"); ,然后调用 bind(my_socket, (SOCKADDR *) &my_sockaddr, ...)
  • 碰巧的是,INADDR_ANY 是一个恰好等于“零”的常数:

    http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html
    # define INADDR_ANY ((unsigned long int) 0x00000000)
    ...
    # define INADDR_NONE    0xffffffff
    ...
    # define INPORT_ANY 0
    ...
    
  • 如果您还不熟悉它,我强烈建议您查看 Beej 的套接字编程指南:

    http://beej.us/guide/bgnet/

  • 由于人们仍在阅读本文,因此请补充说明:



    还:

    关于c - 理解 INADDR_ANY 进行套接字编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16508685/

    10-15 01:21