理解为INADDR_ANY套接字编程 - ç [英] understanding INADDR_ANY for socket programming - c

查看:342
本文介绍了理解为INADDR_ANY套接字编程 - ç的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想一些套接字程序等,在服务器端,我用 htonl(INADDR_ANY)。以我的理解程度,在我看来,这个函数生成一个随机的IP(我是正确的?)。其实,我想我的套接字绑定与我的本地主机。但是,如果我运行此

 的printf(%d个,htonl(INADDR_ANY));

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


解决方案

  1. 绑定(INADDR_ANY),就不会产生一个随机的IP。它绑定到所有可用的接口的插座。


  2. 有关的服务器,通常要绑定到所有接口 - 不只是localhost的。


  3. 如果您想将插座仅绑定本地主机,语法将 my_sockaddress.sin_addr.s_addr = inet_addr(127.0.0.1); ,然后调用绑定(my_socket,(SOCKADDR *)及my_sockaddr,...)


  4. 碰巧的是,INADDR_ANY,是碰巧等于零的常数:

    <一个href=\"http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html\">http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html

     #定义INADDR_ANY((unsigned long int类型)00000000)
    ...
    #定义INADDR_NONE为0xffffffff
    ...
    #定义INPORT_ANY 0
    ...


  5. 如果您还不熟悉它,我劝你看看Beej的指南套接字编程:

    <一个href=\"http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html\">http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html


I am trying to program some sockets and so, on the server side, I use htonl(INADDR_ANY). To the extent I understood, it seems to me that this function generates a random IP (am I correct ?). In fact, I want to bind my socket with my localhost. But if I run this

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

I get 0 as a return value. Could someone bring some explanation ?

解决方案

  1. bind() of INADDR_ANY DOES NOT "generate a random IP". It binds the socket to all available interfaces.

  2. For a server, you typically want to bind to all interfaces - not just "localhost".

  3. If you wish to bind your socket to localhost only, the syntax would be my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1");, then call bind(my_socket, (SOCKADDR *) &my_sockaddr, ...).

  4. As it happens, "INADDR_ANY" is a constant that happens to equal "zero":

    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
    ...
    

  5. If you're not already familiar with it, I urge you to check out Beej's Guide to Sockets Programming:

    http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html

这篇关于理解为INADDR_ANY套接字编程 - ç的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆