socket网络编程
API总结
int inet_aton(const char *cp, struct in_addr *inp);
转换网络主机地址为二进制数值并存储与第二个参数中
函数返回0表示主机地址无效,非0表示主机地址有效
转化完后需要调用htons或htonl函数才能将主机字节序转换为网络字节序用于网络传输
char *inet_ntoa(struct in_addr in);
转换网络字节序为标准的ASCII以点分开的地址,函数返回字符串指针
该字符串空间为静态分配,第二次调用时会覆盖第一次的内容
in_addr_t inet_addr(const char *cp);
转换网络主机地址为网络字节序二进制值
参数无效,返回 -1(INADDR_NONE)
注意:转换 255.255.255.255 时也返回 -1
int inet_pton(int af, const char *src, void *dst);
转换字符串到网络地址,af是地址簇,src是来源地址, dst接收转换后的数据。
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
转换网络字节序二进制值到 ASCII 类型的地址,参数的作用和 inet_pton
相同socklen_t cnt
指所指向缓存区 dst 的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将 errno 置为 ENOSPC
。
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout);
int maxfdp
指集合中所有文件描述符的范围,即所有文件描述符的最大值加 1 ,不能错!
在Windows中这个参数的值无所谓,可以设置不正确。struct fd_set
可以理解为一个集合,这个集合中存放的是文件描述符 (filedescriptor) ,即文件句柄。监视这些文件描述符的读变化
int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);
s(套接字): 指向一个打开的套接口描述字
level(级别): 指定选项代码的类型
SOL_SOCKET: 基本套接口
IPPROTO_IP: IPv4套接口
IPPROTO_IPV6: IPv6套接口
IPPROTO_TCP: TCP套接口
optname(选项名): 选项名称
optval(选项值): 是一个指向变量的指针 类型:整形,套接口结构, 其他结构类型:linger{}, timeval{ }
optlen(选项长度) :optval 的大小
int PASCAL FAR recvfrom( SOCKET s, char FAR* buf, int len, int flags,struct sockaddr FAR* from, int FAR* fromlen);
s:标识一个已连接套接口的描述字
buf:接收数据缓冲区
len:缓冲区长度
flags:调用操作方式
from:(可选)指针,指向装有源地址的缓冲区
fromlen:(可选)指针,指向from缓冲区长度值