socket基础api
来源:互联网 发布:excel找出a列重复数据 编辑:程序博客网 时间:2024/06/06 01:04
一 .字节序转换函数
uint32_t ntohl (uint32_t __netlong) uint16_t ntohs (uint16_t __netshort) uint32_t htonl (uint32_t __hostlong) uint16_t htons (uint16_t __hostshort)
二 .地址结构
socket api的地址形参不会使用具体的ipv4或者ipv6地址,参数类型是通用地址结构 struct sockaddr,struct sockaddr定义如下 :
struct sockaddr { __SOCKADDR_COMMON (sa_); char sa_data[14]; }; #define __SOCKADDR_COMMON(sa_prefix) \ sa_family_t sa_prefix##family typedef unsigned short int sa_family_t;
成员sa_family,表示地址族类型,sa_family决定了以什么地址来解析sa_data,
sa_family的三种类型 :
AF_UNIX UNIX域协议族AF_INET ipv4协议族AF_INET6 ipv6协议族
ipv4地址结构 sockaddr_in:
struct sockaddr_in { __SOCKADDR_COMMON (sin_); in_port_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; }; typedef uint32_t in_addr_t; struct in_addr { in_addr_t s_addr; };
ipv6地址:
struct sockaddr_in6 { __SOCKADDR_COMMON (sin6_); in_port_t sin6_port; /* Transport layer port # */ uint32_t sin6_flowinfo; /* IPv6 flow information */ struct in6_addr sin6_addr; /* IPv6 address */ uint32_t sin6_scope_id; /* IPv6 scope-id */ };
unix域套接字地址 :
struct sockaddr_un { __SOCKADDR_COMMON (sun_); char sun_path[108]; /* Path name. */ };
三 .IP地址转换函数,
int inet_pton (int __af, __const char * src, void * dst)const char *inet_ntop (int __af, __const void * srd, char * dst, socklen_t __len)
inet_pton:把src中的字符串IP地址转换成网络字节序的IP地址
inet_ntop:把src中的网络字节序的IP地址转换为字符串
参数 __af为 AF_INET或者AF_INET6,用来区分ipv4和ipv6
四 .api
int socket (int domain, int type, int protocol)
domain: 取AF_INET或者AF_INET6,用来区分ipv4和ipv6type: 取SOCK_STREAM(TCP)或者SOCK_DGRAM(UDP)protocol:默认值0
int bind (int fd, CONST_SOCKADDR_ARG addr, socklen_t len)
fd : socket套接字addr: ip地址 len : addr的长度
int listen (int fd, int n)
fd:套接字n: 完全连接队列的上限,tcp中表示完成三步握手的请求队列上限
int accept (int fd, SOCKADDR_ARG addr, socklen_t addr_len);
fd: socketaddr: 接受连接的地址addr_len: 地址长度
int connect (int fd, CONST_SOCKADDR_ARG addr, socklen_t len)
fd:socketaddr:要连接的地址len:addr的长度
int close(int fd);
关闭连接,引用计数减1,引用计数变为0才真正关闭.
int shutdown (int fd, int how) ;
直接关闭连接 how的取值: SHUT_RD 不再读; SHUT_WR 不再写; SHUT_RDWR 不再读写.
ssize_t read(int fd, void *buf, size_t nbytes)ssize_t write(int fd, const void *buf, size_t n)ssize_t send(int fd, const void *buf, size_t n, int flags);ssize_t recv(int fd, void *buf, size_t n, int flags);
tcp连接的接收发送数据api,flags用来设置一些参数,如是否阻塞,是否一次读完
ssize_t recvfrom(int fd, void * buf, size_t n, int flags,SOCKADDR_ARG addr, socklen_t *addr_len)ssize_t sendto(int fd, const void *buf, size_t n,int flags, __CONST_SOCKADDR_ARG addr, socklen_t addr_len);
udp接收数据,发送数据的api,因为不是面向连接的,发送时需要填地址,接收时需要保存地址.
ssize_t sendmsg(int fd, const struct msghdr *message,int flags); ssize_t recvmsg (int fd, struct msghdr *message, int flags);
通用的发送,接收消息的api.
int getsockname (int fd, SOCKADDR_ARG addr, socklen_t * len);int getpeername (int fd, SOCKADDR_ARG addr,socklen_t * __len);
获取socket上的本地地址和对端地址.
int getsockopt (int fd, int level, int optname, void * optval,socklen_t * optlen);int setsockopt (int fd, int level, int optname,const void *optval, socklen_t optlen);
获取或者设置套接字的选项值,level取值,SOL_SOCKET, 通用的IPPROTO_IP, ipv4的IPPROTO_IPV6, ipv6的IPPROTO_TCP, TCP选项
struct hostent *gethostbyname (__const char *name);struct hostent *gethostbyaddr (__const void *addr, __socklen_t len,int type);struct hostent{ char *h_name; /* Official name of host. */char **h_aliases; /* Alias list. */int h_addrtype; /* Host address type. */int h_length; /* Length of address. */char **h_addr_list; /*List of addresses from name server.*/#if defined __USE_MISC || defined __USE_GNU# define h_addr h_addr_list[0] /* Address, for backward compatibility.*/#endif };
根据地址获取主机的信息
struct servent *getservbyname(const char *name,const char *proto);struct servent *getservbyport (int port, const char *proto);
根据服务名或者端口号获取服务的信息.
0 0
- API SOCKET基础
- 基础 SOCKET API 详解
- Socket编程基础API
- socket基础api
- socket网络编程api基础
- Socket编程基础--Socket API介绍
- API SOCKET基础(二) UDP通信
- API SOCKET基础(五) 异步套接字
- API SOCKET基础(四) TCP SOCKET recv的内存情况
- socket编程基础2(socket API函数介绍)
- socket编程基础2(socket API函数介绍)
- Linux下socket编程基础——socket地址API
- Linux网络编程基础API--socket地址API
- Linux网络编程基础API--socket文件描述符API
- socket 基础(Linux网络编程基础API)
- API SOCKET基础(一) TCP建立连接并通信
- API SOCKET基础(一) TCP建立连接并通信
- API SOCKET基础(一) TCP建立连接并通信
- wxPython Cookbook (Chatper1)part 3
- MSP430应用技巧3:中断优先级
- 【转】阴影锥原理详解
- uzip命令详解
- hdu 2437 Jerboas(bfs,dfs)
- socket基础api
- Cisco主要产品介绍(路由器、交换机)
- sed 批量替换字符串
- Androidannotation 报错:cannot be resolved or is not a field
- 思科交换机指示灯详解
- 浅谈多线程入门基础
- NYOJ_65 另一种阶乘问题
- RIP基础理论
- OSPF基础理论