1.int socket(int domain, int type, int protocol);
返回值:成功返回套接字文件描述符,失败返回-1
参数说明:
- domain:指定所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族)。1)AF_INET:IPv4因特网域;2)AF_INET6:IPv6因特网域;3)AF_UNIX:Unix域;4)AF_ROUTE:路由套接字;5)AF_KEY:密钥套接字;6)
AF_UNSPEC:未指定。 - type:指定socket的类型。1)SOCK_STREAM:流式套接字提供可靠的,面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性;2)SOCK_DGRAM:数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠,无差错的,它使用数据报文协议UDP;3)SOCK_RAM:允许程序使用低层协议,原始套接允许对底层协议,如IP或ICMP进行直接访问,功能强大但使用较为不便,主要用于一些协议的开发。
- protocol:通常赋值0。1)0:选择type类型对应的默认协议;2)IPPROTO_TCP:TCP传输协议;2)IPPROTO_UDP:UDP传输协议;3)IPPROTO_SCTP:SCTP传输协议;4)IPPROTO_TIPC:TIPC传输协议。
2.int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:用于绑定IP地址和端口号到sockfd
返回值:成功返回0,失败返回-1
参数说明:
- sockfd:套接字文件描述符
- addr:是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针,指向要绑定给sockfd的协议地址结构,这个地址结构根据地址创建socket时的地址协议族的不同而不同

- addrlen:是第二个参数addr结构额长度,可以设置成 sizeof(struct sockaddr)
3.IP地址转换api
int inet_aton(const char *straddr, struct in_addr *addrp);
功能:把字符串形式的(如:“192.168.1.123”)转为网络能识别的格式char *inet_ntoa(struct in_addr inaddr);
功能:把网络格式的IP地址转为字符串形式
4.int listen(int sockfd, int backlog);
功能:设置能处理的最大连接数。listen()并未开始接受连线,只是设置socket 的 listen 模式,listen函数只用于服务器端,服务器进程不知道要与谁连接,因此,它不会主动地要求与某个进程连接,只是一直监听是否有其他客户进程与之连接,然后响应该连接请求,并对它做出处理,一个服务进程可以同时处理多个客户进程的连接,主要就两个功能:将一个未连接的套接字转换为一个被动套接字(监听);规定内核为相应套接字排队的最大连接数。
内核为任何一个给定监听套接字维护两个队列:
1)未完成连接队列,每个这样的SYN报文段对应其中一项:已由某个客户端发出并到达服务器,而服务器正在等待完成相应的TCP三次握手过程。这些套接字处于SYN_REVD状态
2)已完成连接队列,每个已完成TCP三次握手过程的客户端对应其中一项。这些套接字处于ESTABLISHED状态
参数说明:
- sockfd:是socket系统调用返回的服务器端socket描述符
- backlog:指定在请求队列中允许的最大请求数
5.int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:accept函数由TCP服务器调用,用于已完成连接队列头返回下一个已完成连接。如果已完成连接队列为空,那么进程被投入睡眠
返回值:该函数的返回值是一个新的套接字文件描述符,返回值是表示已连接的套接字描述符,而第一个参数是服务器监听套接字描述符,一个服务器通常仅仅创建一个监听套接字,它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建一个已连接套接字(表示TCP三次握手已完成),当服务器完成对某个给定客户的服务时,相应的已连接套接字就会被关闭。失败返回-1
参数说明:
- sockfd:是socket系统调用返回的服务器端socket描述符
- addr:用来返回已连接的对端(客户端)的协议地址
- addrlen:客户端地址长度
6.ssize_t send(int s, const void *msg, size_t len, int flags);
包含3要素:套接字s,待发数据msg,数据长度len
函数只能对处于连接状态的套接字使用,参数s为已建立好连接的套接字描述符,即accept函数的返回值
参数msg指向存放待发数据的缓冲区
参数len为待发送数据的长度
参数flags为控制选项,一般设置为0
7.ssize_t recv(int s, void *buf, size_t len, int flags);
包含3要素:套接字s,接收缓冲区buf,长度len
函数recv从参数s所指定的套接字描述符(必须是面向连接的套接字)上接收
数据并保存到参数buf所指定的缓冲区
参数len则为缓冲区长度
参数flags为控制选项,一般设置为0
8.int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:该函数用于绑定之后的client(客户端),与服务器连接
返回值:成功返回0,失败返回-1
参数说明:
- sockfd:是目的服务器的socket描述符
- addr:是服务器的IP地址和端口号的地址结构指针
- addrlen:地址长度,常被设置为 sizeof(struct sockaddr)