我想得到eth0的IP.这是我写的(也许有办法解决它?):
int sockfd = socket(AF_INET, SOCK_DGRAM, 0); check(sockfd > 0, "cannot create socket\n"); #define INTERFACE_NAME "eth0" #define INTERFACE_NAME_LENGTH 4 char *opt = INTERFACE_NAME; rc = setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, opt, INTERFACE_NAME_LENGTH); check(rc == 0, "BINDTODEVICE failed"); struct ifreq req; strncpy(req.ifr_name, INTERFACE_NAME, IFNAMSIZ); rc = ioctl(sockfd, SIOCGIFADDR, (unsigned long)&req); check(rc == 0, "SIOCGIFADDR failed"); server_ip = ((struct sockaddr_in*)&req.ifr_addr)->sin_addr.s_addr; char str[50]; inet_ntop(AF_INET, &(server_ip), str, INET_ADDRSTRLEN); debug("serverip: %s", str); return sockfd; error: if (sockfd) close(sockfd); exit(1);
我收到以下错误:
[错误](src/server/server.c:43:errno:无法分配请求的地址)SIOCGIFADDR失败
如果我使用与wlan0相同的方法,我会得到我期望看到的内容.
这是netstat输出:
netstat -tulpn:
Proto | Local Address | PID udp | 0.0.0.0:16313 | 4666/dhclient udp | 0.0.0.0:68 | 4687/dhclient udp | 0.0.0.0:68 | 4666/dhclient
所以,我认为由于dhclients,我无法分配地址?为什么会有这么多?为什么16313端口有一个?
UPD:
我补充道
auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0
到/ etc/network/interfaces并重新启动网络并取得了一些进展:
DEBUG src/server/server.c:50: serverip: 192.168.1.1
然后我可以成功绑定套接字,但连接在几秒钟内无缘无故死亡.