纵观通用插座结构定义sys/socket.h规范它列出:Socket编程(SYS/socket.h中)
sa_family_t sa_family address family
char sa_data[] socket address (variable-length data)
纵观位于/usr/includes/sys/socket.h我实际的头文件我的linux机器,它定义如下。
struct osockaddr
{
unsigned short int sa_family;
unsigned char sa_data[14];
};
现在我知道,如果我包括netinet/in.h它会定义一个sockaddr_in
结构,因为我用AF_INET
这将使因为使用这个......
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
不过,我觉得它当我可以简单地使用通用的osockaddr
结构时,不需要#include另一个lib(netinet/in.h)。
现在我明白了我的osockaddr
成员sa_family
将涉及AF_INET
但我不清楚什么是真正的sa_data
部件的内部去...我假设port,addr,zero
相对于sockaddr_in
结构,但我不清楚。
问题:任何人都可以给我一个使用通用osockaddr
结构的例子吗?
我有什么到目前为止....
#include<sys/socket.h>
int main(void){
struct osockaddr address;
address.sa_family = AF_INET;
address.sa_data = ? //What goes here (port, addr, zero)?
return 0;
}
我会初始化并链接整个'netinet/in.h'文件,所以它是额外的......我不需要链接它,'sys/socket.h'定义了socket(),bind (),listen(),rec(),send()并且在没有它的情况下工作得很好...... –
不,没有任何东西与头文件链接。这不是Java或您从哪里来的任何语言。两个标题都属于同一个标准库。 'netinite/in.h'只是告诉你这个库有一些功能。不包括它并不意味着这些功能不包括在内。你甚至可以使用这些功能而不包括它。 – x539
一切都是链接的....如果我不包含'#include'头文件,我将无法使用该文件中定义的任何“特性”... #include是编译器的预处理器指令...如果我不包含该文件,我不会初始化它内部的任何内容,从而使我的程序更高效...... –