Socket 信息数据结构:
struct sockaddr
{
unsigned short sa_family;//地址族
char sa_data[14];// 14字节的协议地址,包括socket的IP地址和端口号
}
struct sockaddr_in
{
short int sa_family;
unsigned short int sin_port;
struct in_addr sin_addr;//IP地址
unsigned char sin_zero[8];//填充0即可
}
struct in_addr
{
unsigned long int s_addr;//32位IPv4地址,网络字节序
}
struct hostent
{
char *h_name;
char **h_aliases;//主机别名
int h_addrtype;//IPv4一般用AF_INET即可
int h_length;//主机IP地址字节长度32位
char **h_addr_list;
}#define h_addr h_addr_list[0]
常用函数:
unsigned long int inet_addr(const char *cp);
将网络地址字符串转换成网络用二进制,失败返回-1
int inet_aton(const char *cp,struct in_addr *inp);
address to net,cp网络地址字符串转换成二进制存于inp,成功返回非0,失败返回0
int inet_ntoa(struct in_addr in);
net to address,成功返回字符串指针,失败返回NULL
int socket(int domain,int type,int protocol);
domain指定何种地址类型(一般AF_INET),type一般用SOCK_STREAM(TCP),SOCK_DGRAM(UDP),protocol一般为0,成功返回socket处理代码,失败返回-1
int bind(int sockfd,struct sockaddr* my_addr,int addrlen);
用于给参数sockfd一个名称,该名称由参数my_addr指向sockaddr结构,成功返回0,失败返回1
int listen(int s,int backlog);
用于等待s的socket链接,backlog为最大链接要求,成功返回0,失败返回-1
int accept(int s,struct sockaddr* addr,int *addrlen);
接受参数s的socket链接,s必须经过bind()和listen()处理过,成功返回socket处理代码,失败返回-1
int send(int s,const void *msg,int len,unsigned int flags);
s为连接好的socket,msg为内容,len为长度,flag一般为0,成功返回送出的msg,失败返回-1
int sendto(int s,const void *msg,int len,unsigned int flags,const struct sockaddr *to,int tolen);
int recv(int s,void *buf,int len,unsigned int flags);
接受s传来的数据存在buf中,len为最大接受长度,flags一般为0
int recvfrom(int s,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);
其他
pid_t fork(void);
成功返回0(子进程中)或者子进程号(父进程中),错误返回-1
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
pthread_t *restrict tidp:要创建的线程ID指针
const pthread_attr_t *restrict attr:创建线程的属性,一般为NULL
void *(*start_rtn)(void):要执行的返回值是void的指针函数
void *restrict arg:start_rtn的行参
纯手打,转载复制等请声明作者~