使用 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
分享到:
相关推荐
7. **发送命令**:使用`send`函数向连接的套接字发送数据。在异步模式下,如果缓冲区已满,`send`可能不会立即发送所有数据,但不会阻塞。 8. **接收数据**:异步接收数据通常涉及注册一个套接字的`FD_READ`事件,...
本书专门讨论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
1. **创建原始套接字**:使用`socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))`创建一个原始套接字,参数`PF_PACKET`指定使用数据链路层协议,`SOCK_RAW`表示创建的是原始套接字。 2. **设置混杂模式**:通过`ioctl...
程序首先打开一个套接字,然后通过`ioctl()`调用`SIOCETHTOOL`命令,传递一个包含`ethtool_cmd`结构体的`ifreq`结构体,来获取以太网卡的物理层信息。通过检查`ethtool_cmd`中的`speed`和`duplex`字段,可以判断接口...
对字符设备、块设备、及套接字,非常方便扩充新的命令)。 QT版本(qt-opensource-linux-x64-5.13.2)。 使用了QT的线程, 相机的整个采图过程在子线程中进行,可以避免卡住主线程。 并且把抓到的图转为QImage对象,...
1. **SIOCATMARK**: 这个命令用于检查套接字是否处于带外数据(Out-of-Band Data,OOB)标记状态。如果套接字有未读的带外数据,`ioctl`返回非零值,否则返回0。 2. **SIOCGPGRP/SIOCSPGRPN, SIOCSPGRP**: 这些命令...
在使用 select 函数时,我们需要将相应的套接字加入到相应的集合中。如果集合中的套接字有信号,select 函数的返回值即为集合中有信号的套接字数量。 我们可以使用以下几个宏来操作 fd_set 集合: * FD_SET(s, *...
1. **套接字编程**:理解套接字的概念,创建和使用数据报套接字。 2. **I/O控制**:`ioctl()`函数的使用,以及不同ioctl命令的含义。 3. **网络接口结构体**:`ifreq`和`sockaddr_in`结构体的使用,以及它们在获取...
- 在Linux中,不同的套接字类型使用不同的地址结构,例如AF_INET类型使用`sockaddr_in`结构体来存储地址信息。 **1.3 网络字节序** - **1.3.0 大端与小端对齐问题** - 计算机存储数据时有两种字节序:大端模式...
### 非阻塞recvfrom的设置 #### Ioctlsocket() 函数详解 **Ioctlsocket()** 是Windows ...通过对`ioctlsocket()`函数的恰当使用以及对`recvfrom()`函数返回值的正确处理,你可以有效地管理非阻塞套接字上的数据传输。
`ioctlsocket(s, FIONBIO, argp)`这里的`s`是套接字句柄,`FIONBIO`是命令常量,用于设置非阻塞模式,`argp`传入的值如果是1,则设置为非阻塞,0则恢复为阻塞。 接着,`select`函数在非阻塞模式中扮演关键角色。`...
这些命令码以`SIOC`(Socket I/O Control)开头,表示它们与套接字操作有关。 在描述的博客文章中提到了`struct sockaddr_in`,这是用于存储IPv4地址的结构体。它包含以下字段: - `sin_family`:地址族,通常设置...
addr`(解析IP地址字符串)、`ioctlsocket`(设备控制命令)、`listen`(监听连接请求)、`ntohl`(网络长整型字节序转主机字节序)、`ntohs`(网络短整型字节序转主机字节序)、`setsockopt`(设置套接字选项)、`...
另外,`ioctlsocket`函数用于对套接字的I/O行为进行控制,比如查询未决I/O的状态。而在Winsock 2中引入的`WSAIoctl`函数扩展了更多的控制代码,提供了更多功能,如设置异步I/O、检查TCP连接状态等。`WSAIoctl`接受一...
4. **HCI命令发送**:开发者可以使用HCI套接字发送命令到蓝牙控制器,如读取设备信息、设置连接参数、发起配对等。 5. **HCI数据传输**:源码会涉及如何通过HCI套接字发送和接收ACL数据包,实现蓝牙的数据传输。 6...
标题 "run-shell with unix socket" 描述的是在Unix系统中使用Unix域套接字(socket)来执行shell命令。Unix域套接字是进程间通信(IPC, Inter-Process Communication)的一种方式,它允许同一台机器上的进程之间进行...
使用原始套接字虽然可以捕获网络层以下的数据包,但需要管理员权限,因为这种操作有可能影响到系统的安全和稳定性。因此,在Linux中运行程序时可能需要使用sudo命令。 对于网络抓包程序来说,了解网络协议栈的结构...