UNIX网络编程卷一:3 套接字编程简介
程序员文章站
2022-03-02 13:57:49
...
1、套接字地址结构
ipv4套接字地址结构
<netinet/in.h>
struct in_addr
struct sockaddr_in
2、通用套接字地址结构
<sys/socket.h>
struct sockaddr
3、值-结果参数
从进程到内核传递套接字地址结构的函数有3个:bind、connect、sendto
从内核到进程传递套接字地址结构的函数有4个:accept、recvfrom、getsockname、getpeername
4、字节序排序函数
一个16位整数,它由2个字节组成,内存中存储这二个字节有二种方法:一种是将低序字节存储在起始地址,这称为小端字节序
另一种方法是将高序字节存储在起始地址,这称为大端字节序。
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
|
5、字节操纵函数
名字以b开头的一组函数起源于BSD
bzero
bcopy
bcmp
ANSI C函数
memset
memcpy
memcmp
6、inet_aton inet_addr inet_ntoa
下列函数在点分十进制数串(101.168.112.96)与它长度为13位的网络字节序二进制间转换IPV4地址
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);
in_addr_t inet_addr(const char *cp);
in_addr_t inet_network(const char *cp);
char *inet_ntoa(struct in_addr in);
struct in_addr inet_makeaddr(int net, int host);
in_addr_t inet_lnaof(struct in_addr in);
in_addr_t inet_netof(struct in_addr in);
|
inet_aton将cp所指的字符串转换成一个32位的网络字节序二进制值。
inet_ntoa 函数将一个32位的网络字节序二进制ipv4地址转换成相应的点分十进制数串。
7、inet_pton inet_ntop
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
const char *inet_ntop(int af, const void *src,
char *dst, socklen_t size);
|
8、readn writen readline
字节流套接字上的read和write函数所表现的行为不同于通常的文件IO。字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,然而这不是出错的状态。这个现象的原因在于内核中用于套接字的缓冲区可能已达到了极限。此时所需的是调用者再次调用read或write函数,以输入或输出剩余字节。