socket基本函数 (三)
9. 地址转换函数
在socketaddr_in结构中,sin_addr用来指定主机地址.它的类型是in_addr结构.
in_addr结构定义为:
struct in_addr{
union{
struct {u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;
struct {u_short s_w1,s_w2;} S_un_w;
u_long S_addr;
}S_un;
};
unsigned long inet_addr(const char FAR* cp); 将点分十进制格式的IP地址转换为in_addr结构的地址.
char FAR* inet_ntoa(struct in_addr in); 将in_addr结构的地址转换为点分十进制格式的IP地址.
10. 字节序转换函数
网络中存在多种类型计算机,不同计算机表示数据的字节序不同,网络协议中的数据采用统一的网络字节序.
unsigned long htonl(unsigned long hostlong); 将无符号长整型数从主机字节序转换为网络字节序.
unsigned long ntohl(unsigned long netlong); 将无符号长整型数从网络字节序转换为主机字节序.
unsigned short htons(unsigned short hostshort); 将无符号短整型数从主机字节序转换为网络字节序.
unsigned short ntohs(unsigned short netshort); 将无符号短整型数从网络字节序转换为主机字节序.
11. 主机信息获取函数
在SOCKET编程中,使用主机名和IP地址等,可以通过hostent结构来获取相关信息.
hostent结构的定义:
struct hostent{
char FAR* h_name;
char FAR* h_aliases;
short h_addrtype;
short h_length;
char FAR* h_addr_list;
};
h_name是主机名;
h_aliases是主机别名;
h_addrtype用来表示主机的地址类型;
h_length用开表示主机地址的长度;
h_addr_list用来表示主机所有地址;
int gethostname(char FAR* name,int namelen); 获取主机名.
struct hostent FAR* gethostbyname(const char FAR* name); 获取主机地址
12. 套接字处理函数
int ioctlsocket(SOCKET s,long cmd,u_long FAR* argp); 控制套接字的操作模式.
int getsockopt(SOCKET s,int level,int optname,char FAR* optval,int FAR* optlen); 获取套接字的选项
int setsockopt(SOCKET s,int level,int optname,const char FAR* optval,int optlen); 设置套接字选项
13. GetLastError()函数
获取错误类型,如果某个Socket函数返回SOCKET_ERROR,说明该函数在处理过程中出现错误,通过调用GetLastError()函数获取该错误对应的错误类型码,从而判断错误类型并决定如何处理.