使用 ioctl 套接字控制选项
通常,网络程序需要了解系统中所有有关网络接口和 IP 地址的可用信息。现在,未来的应用程序可以支持 IPv4 和 IPv6 双协议栈。ioctl 结构需要对指针进行遍历和操作,以处理 IPv4 和 IPv6 地址在长度上的差别(除了使用合适的套接字结构 sockaddr_in6 或 sockaddr_storage 之外)。
AIX Version 5.3 提供了很多 ioctl 套接字控制选项,以提取各种有关网络接口的信息。这些 ioctl 命令用于查询接口的状态并对其属性进行操作。下面的部分中包含了一些有用的命令的代码段。有关 ioctl 命令的完整列表,请参见参考资料部分。
ioctl 命令所使用的结构
下面的清单介绍了一些最重要的结构,使用 ioctl 套接字命令时常常用到这些结构。
清单 1. struct ifreq (/usr/include/net/if.h)
/* Interface request structure used for socket
* ioctl's. All interface ioctl's must have parameter
* definitions which begin with ifr_name. The
* remainder may be interface specific.
*/
struct ifreq {
#ifndef IFNAMSIZ
#define IFNAMSIZ 16
#endif
char ifr_name[IFNAMSIZ];
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
__ulong32_t ifru_flags;
int ifru_metric;
caddr_t ifru_data;
u_short ifru_site6;
__ulong32_t ifru_mtu;
int ifru_baudrate;
} ifr_ifru;
Following macros are provided for convenience
#define ifr_addr ifr_ifru.ifru_addr /* address */
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
#define ifr_flags ifr_ifru.ifru_flags /* flags */
#define ifr_metric ifr_ifru.ifru_metric /* metric */
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
#define ifr_site6 ifr_ifru.ifru_site6 /* IPv6 site index */
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu of interface */
#define ifr_isno ifr_ifru.ifru_data /* pointer to if_netopts */
#define ifr_baudrate ifr_ifru.ifru_baudrate /* baudrate of interface */
};
|
清单 2. struct ifconf (/usr/include/net/if.h)
/*
* Structure used in SIOCGIFCONF request.
* Used to retrieve interface configuration
* for machine (useful for programs which
* must know all networks accessible).
*/
struct ifconf {
int ifc_len; /* size of associated buffer */
union {
caddr_t ifcu_buf;
struct ifreq *ifcu_req;
} ifc_ifcu;
Following macros are provided for convenience
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
#define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */
};
|
详细内容:http://www.ibm.com/developerworks/cn/aix/library/au-ioctl-socket.html#resources
分享到:
相关推荐
本书专门讨论Windows网络编程技术。...IPX选项级别 2279.2 IOCTLSOCKET和WSAIOCTL 2319.2.1 标准I/O控制命令 2329.2.2 其他I/O控制命令 2339.2.3 安全套接字层的I/O控制命令 2399.2.4 ATM I/O控制命令 2419.3 小结 242
对字符设备、块设备、及套接字,非常方便扩充新的命令)。 QT版本(qt-opensource-linux-x64-5.13.2)。 使用了QT的线程, 相机的整个采图过程在子线程中进行,可以避免卡住主线程。 并且把抓到的图转为QImage对象,...
全书由13章组成,内容涉及到Lindx系统编程基础、TCP/UDP协议、套接字编程概念及I/O模型、高级编程中需要用到的进程问通信同步、多路复用、多线程编程和一些高级套接字控制方法、IPv6介绍以及网络安全等。...
IRLMP选项级别2189.1.4 IPPROTO_IP选项级2229.1.5 IPPROTO_TCP选项级别2279.1.6 NSPROTO_IPX选项级别2279.2 IOCTLSOCKET和WSAIOCTL2319.2.1 标准I/O控制命令2329.2.2 其他I/O控制命令2339.2.3 安全套接字层的I/O控制...
1768.2.2 WSAAsyncSelect 1798.2.3 WSAEventSelect 1838.2.4 重叠模型 1888.2.5 完成端口模型 1988.3 I/O模型的问题 2068.4 小结 206第9章 套接字选项和I/O控制命令 2079.1 套接字选项 2079.1.1 SOL_SOCKET选项级别 ...
IRLMP选项级别2189.1.4 IPPROTO_IP选项级2229.1.5 IPPROTO_TCP选项级别2279.1.6 NSPROTO_IPX选项级别2279.2 IOCTLSOCKET和WSAIOCTL2319.2.1 标准I/O控制命令2329.2.2 其他I/O控制命令2339.2.3 安全套接字层的I/O控制...
1768.2.2 WSAAsyncSelect 1798.2.3 WSAEventSelect 1838.2.4 重叠模型 1888.2.5 完成端口模型 1988.3 I/O模型的问题 2068.4 小结 206第9章 套接字选项和I/O控制命令 2079.1 套接字选项 2079.1.1 SOL_SOCKET选项级别 ...
IRLMP选项级别2189.1.4 IPPROTO_IP选项级2229.1.5 IPPROTO_TCP选项级别2279.1.6 NSPROTO_IPX选项级别2279.2 IOCTLSOCKET和WSAIOCTL2319.2.1 标准I/O控制命令2329.2.2 其他I/O控制命令2339.2.3 安全套接字层的I/O控制...
IRLMP选项级别2189.1.4 IPPROTO_IP选项级2229.1.5 IPPROTO_TCP选项级别2279.1.6 NSPROTO_IPX选项级别2279.2 IOCTLSOCKET和WSAIOCTL2319.2.1 标准I/O控制命令2329.2.2 其他I/O控制命令2339.2.3 安全套接字层的I/O控制...