我正在使用 UDP 应用程序,但我不确定我这样做是否正确。我需要将地址输入 addr.sin_addr.s_addr
。到目前为止我只使用过 addr.sin_addr.s_addr = htonl(INADDR_ANY)
但我需要设置从用户那里获得的特定地址。当我使用addr.sin_addr.s_addr = htonl(adresa)
时我做得对吗? ?
完整代码:
int main(int argv, char **argc)
{
strcpy(adresa, "someadress");
int optval;
struct sockaddr_in addr;//, incoming_addr;
/* create socket */
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock < 0)
{
err("socket()");
}
/* set reusable flag */
optval = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
/* prepare inet address */
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
if(strcmp(adresa, "-") == 0)
{
addr.sin_addr.s_addr = htonl(INADDR_ANY); /* listen on all interfaces */
}
else
{
addr.sin_addr.s_addr = htonl(adresa); /* listen on all interfaces */
}
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
{
err("bind");
}
for(;;)
{
}
return 0;
}
最佳答案
最简单的方法是使用inet_addr
函数,它可以获取 IPv4 地址并将其转换为网络字节顺序的地址,如 in_addr_t
。然后可以将该值存储在 sin_addr.s_addr
中:
addr.sin_addr.s_addr = inet_addr(adresa);
关于c - 将接口(interface)地址传递给bind的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34798036/