struct sockaddr_in
其中,port和sin_addr为网络字节序,hton()
sock_addr
常用于bind
connect
recvfrom
sendto
等函数的参数.
Socket
socket
可以算是一种特殊的文件,是"Open--Write/Read--Close"模式的一种实现
普通文件的打开操作返回一个文件描述字,socket返回一个socket描述符
#include <sys/socket.h>
int socket(int family, int type, int protocol);
httpfd = socket(AF_INET, SOCK_STREAM, 0);
family(domain 协议域)AF_INET
--- IPV4
type(socker类型)SOCK_STREAM
--- 面向连接的稳定数据传输
protocol(协议)0
选择与type一致的协议
perror()
#include <stdio.h>
void perror (const char* str );
perror(errinfo);
perror(s) 用来将上一个函数发生错误的原因输出到标准设备(stderr)
exit()
函数名: exit()
所在头文件:stdlib.h(如果是”VC6.0“的话头文件为:windows.h)
功 能: 关闭所有文件,终止正在执行的进程。
exit(0)表示正常退出,
exit(x)(x不为0)都表示异常退出,这个x是返回给操作系统(包括UNIX,Linux,和MS DOS)的,以供其他程序使用。
memset()
#include <string.h>
void* memset(void *s, int ch, size_t n);
memset(&serveraddr, 0, sizeof(serveraddr));
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
sockaddr_in
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(port);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
INADDR_ANY表示不确定地址,任意地址
getsockname()
用法详见以下链接
https://blog.csdn.net/coolingcoding/article/details/7392107
在这里是获得分配的port到serveraddr的port中
getsockname(httpfd, (struct sockaddr*)&serveraddr, &serveraddr_len)
accept()
connfd = accept(httpfd, (struct sockaddr*)&clientaddr, &clientaddr_len);
connfd = accept(httpfd, (struct sockaddr*) NULL, NULL);
accept返回客户端协议到clientaddr中,也可以不填.完成后穿件已连接描述字connfd
pthread_create()
https://www.cnblogs.com/qinshizhi/p/10972649.html
recv() / send()
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);
ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);
https://blog.csdn.net/stpeace/article/details/73435564
strcasecmp()
strcasecmp() 函数比较两个字符串。且不区分大小写
strcasecmp(s1,s2)用忽略大小写比较字符串,此函数只在Linux中提供,相当于windows平台的 stricmp。
返回值:
当函数的s1,s2在忽略大小写的情况下相等时,返回0,!返回值为1;
当函数的s1,s2在忽略大小写的情况下不相等时,s1大于s2则返回正数,s1 小于s2 则返回负数。!返回值为0。
sprintf()
将一个格式化的字符串输出到一个目的字符串中
将"HTTP/1.0 501 Method Not Implemented\r\n"写到buff中
sprintf(buff, "HTTP/1.0 501 Method Not Implemented\r\n");
将"abc" "kkk" "def"写到buff中
sprintf(buff, "%skkk%s", "abc", "def");
最终表现为"abckkkdef"
strcmp()
比较两个字符串是否相等
相等返回0
https://blog.csdn.net/Ctrl_qun/article/details/66970652
strcat()
strcat函数:
将两个char类型连接。
char d[20]="GoldenGlobal";
char *s="View";
strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView
fgets()
char *fgets(char *buf, int bufsize, FILE *stream);
读取一行到buf中,return buf
https://blog.csdn.net/zhiyeegao/article/details/80231555
stat()
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *file_name, struct stat *buf);
https://blog.csdn.net/zhoulaowu/article/details/14118897
https://blog.csdn.net/zq627271551/article/details/54318732
CGI:通用网关接口(Common Gateway Interface)
网友评论