IPV4套接字地址结构
1.#include <netinet/in.h> struct in_addr,struct sockaddr_in
2.#include <sys/socket.h> (struct sockaddr *)通用套接字地址结构
3.字节排序函数 #include <netinet/in.h>
unint16_t htons(uint16_t host16bitvalue)
unint32_t htonl(uint32_t host32bitvalue)
unint16_t ntohs(uint16_t net16bitvalue)
unint32_t ntohl(uint32_t net32bitvalue)
4.字节操控函数 #include <strings.h>
void bzero(void *dest,size_t nbytes); #套接字地址结构初始化
#include <string.h>
void *memset(void *dest , int c, size_t len);
5.#include <arpa/inet.h>
int inet_aton(const char *strptr,struct in_addr *addrptr);
in_adddr_t inet_addr(const char*strptr);#弃用
char *inet_ntoa(struct in_addr inaddr);
int inet_pton(int family,const char *strptr,void *addrptr);
cosnt char *inet_ntop(int family,const void *addrptr,char *strptr,size_t len);
6.read 和 write
#include <unistd.h>
ssize_t read(int filedes, void *buf,size_t nbytes);
ssize_t write(int filedes, void *buf,size_t nbytes);
基本套接字编程
1.socket函数
#include <sys/socket.h>
int socket(int family ,int type, int protocol)
2.connect函数
int connect (int sockfd, const struct sockaddr *servaddr,socklen_t addrlen);
3.bind函数
int bind(int sockfd , const struct sockaddr *myaddr,socklem_t addrlen);
4.listen函数
int listen(int sockfd, int backlog);
5.accept函数
int accept(int sockfd, struct sockaddr *cliaddr,socklen_t *addrlen)
6.#inlcude <unistd.h>
pid_t fork(void);
6个exec函数;
7.并发服务器框架
//并发服务器框架
pid_t pid;
int listenfd,connfd;
listenfd = Socket(...);
/* 填完sockaddr_in{}
Bind(listenfd,...);
Listen(listenfd,LISTENQ);
for(;;){
confd = Accept(listenfd,...);
if (pid = fork() == 0){
Close(listenfd);
doit(connfd);
Close(connfd);
exit(0);
}
Close(connfd);
}
8.#include <unistd.h>
int close(int sockfd);
9.描述符引用计数
- #include <sys/socket.h>
int get sockname(int sockfd,struct sockaddr *localaddr,socklen_t *addrlen);
int getpeername(int sockfd,struct sockaddr *peeraddr,socklen_t *addrlen);
11.wait和waitpid
#include <sys/wait.h>
pid_t wait(int *statloc);
pid_t waitpid(pid_t pid,int *statloc,int options)