理解为INADDR_ANY套接字编程 - ç [英] understanding INADDR_ANY for socket programming - c
问题描述
我想一些套接字程序等,在服务器端,我用 htonl(INADDR_ANY)
。以我的理解程度,在我看来,这个函数生成一个随机的IP(我是正确的?)。其实,我想我的套接字绑定与我的本地主机
。但是,如果我运行此
的printf(%d个,htonl(INADDR_ANY));
我得到0作为返回值。可能有人带来一些解释?
-
绑定(INADDR_ANY),就不会产生一个随机的IP。它绑定到所有可用的接口的插座。
-
有关的服务器,通常要绑定到所有接口 - 不只是localhost的。
-
如果您想将插座仅绑定本地主机,语法将
my_sockaddress.sin_addr.s_addr = inet_addr(127.0.0.1);
,然后调用绑定(my_socket,(SOCKADDR *)及my_sockaddr,...)
。 -
碰巧的是,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
... -
如果您还不熟悉它,我劝你看看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 ?
bind() of INADDR_ANY DOES NOT "generate a random IP". It binds the socket to all available interfaces.
For a server, you typically want to bind to all interfaces - not just "localhost".
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 callbind(my_socket, (SOCKADDR *) &my_sockaddr, ...)
.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 ...
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屋!