TCP/IP Sockets-1
TCP-IPv4
创建和销毁套接字
创建套接字
int socket(int domain,int type,int protocol)
参数
domin
:通信领域,常用参数:IPv4—AF_INET
和IPv6—AF_INET6
type
:套接字类型,常用参数:可靠字节流语义—SOCK_STREAM
,“尽力而为”—OCK_DGRAM
protocol
:指定特定的端到端协议:TCP—IPPROTO_TCP
,UDP—IPPROTO_UDP
返回值
返回通信实例句柄,非负值表示成功,-1表示失败
关闭套接字
int close(int socket)
参数
通信实例句柄
返回值
失败返回-1,成功返回0
指定地址
通用地址
struct sockaddr
{
sa_family_t sa_family; //地址族
char sa_data[14]; //地址信息
}
IPv4地址
struct in_addr
{
uint32_t s_addr; //Internet address(32 bit)
}
struct sockaddr_in
{
sa_family_t sin_family; //地址族
in_port_t sin_port; //端口
struct in_addr sin_addr; //32位地址
char sin_zero[8]; //没用
}
IPv6地址
struct in6_addr
{
unint32_t s_addr[16];
}
struct sockaddr_in6
{
sa_family_t sin6_family; //地址族
in_port_t sin6_port; //端口
uint32_t sin6_flowinfol; //流信息
struct in6_addr sin6_addr; //地址信息
uint32_t sin6_scope_id; //范围标识符
}
二进制/字符串地址转换
int inet_porn(int addressFamily,const char* src,void *dst)
参数
addressFamily
:地址族src
:输入字符串(地址)地址dst
:输出结果地址
返回值
指定的地址族未知,返回-1,格式化未能成功返回0
const char* inet_ntop(int addressFamily,const void* src,char * dst,socklen_t dstBytes)
参数
addressFamily
:地址族src
:原地址(地址大小有地址族确定)dst
:目的地址dstBytes
:目的地址空间大小
返回值
如果返回值返回为NULL则转换失败,否则转换为目的地址
获取套接字的关联地址
int getpeername(int socket,struct sockaddr* remoteAddress,socklen_t* addressLength)
int getsockname(int socket,struct sockdaddr* localAddress,socklen_t* addressLength)
作用
getpeername()
:获取套接字关联的外部地址
getsockname()
:获取套接字关联的本地地址
参数
socket
:套接字的句柄localAddress/remoteAddress
:地址存放的地址空间addressLength
:地址空间的长度
链接套接字
int connet(int socket,const struct sockaddr* foreignAddress,socklen_t addressLength)
参数
socket
:套接字的句柄foreignAddress
:目的地址地址结构addressLength
:结构长度
绑定到地址
int blind(int socket,struct sockaddr* localAddress,socklen_t addresssize)
参数
socket
:套接字的句柄localAddress
:本地地址地址结构addressLength
:结构长度
处理进入的链接
int listen(int socket,int queueLimit)
参数
socket
:套接字的句柄queueLimiet
:等待进入链接数量的上限
返回值
成功返回0,失败返回-1
int accept(int socket,struct sockadd*)