看了unix网络编程是否有点感觉到它讲API讲的很杂,更像一本字典而不是一个可以快速学习的书。这里总结了基础的socket API并附带一些例子应该能帮助你更快的学习。
GitHub:helintongh/Web-Server
欢迎点赞
什么是socket?
- 套接字是网络通信路径的本地端点的抽象表示(句柄)。Berkeley sockets API将其表示为Unix中的一个文件描述符(文件句柄),它为数据流的输入和输出提供了一个公共接口。
- 简单来说:它们是利用标准 UNIX file descriptors(文件描述符)与其它程序沟通的一种方式。
BSD和POSIX套接字有差别的API
所含头文件
套接字函数总结
套接字API通常提供以下功能:
- socket()函数创建一个特定类型的套接字(由整数编号标识),并将系统资源分配给它。 -
- bind()通常用于服务器端,并将套接字与套接字地址结构相关联,即指定的本地IP地址和端口号。
- listen()在服务器端使用,并让绑定的TCP套接字进入监听状态。
- connect()在客户端使用,并将空闲的本地端口号分配给套接字。对于TCP套接字,它会尝试建立新的TCP连接。
- accept()在服务器端使用。它接收从远程客户机创建的新TCP连接的接收传入请求,并创建与此连接的套接字地址相关联的新套接字。
- send(),recv(),sendto()以及recvfrom()用于发送和接收数据。还可以使用标准函数write()和read()。
- close() 使系统释放分配给套接字的资源。对于TCP而言作用是终止连接。
- gethostbyname()和gethostbyaddr() 于解析主机名和地址。仅支持IPv4。
- select()用于挂起程序,等待套接字列表中的一个或多个套接字去准备读/写或出现错误而继续挂起。
- poll() 用于检查套接字中的套接字的状态。这个函数可以测试套接字集合,看看是否有套接字可以写入/读取或是否发生错误。
- getsockopt() 用于检索指定套接字的特定套接字选项的当前值。
- setsockopt() 用于为指定的套接字设置特定套接字选项。
socket
#include <sys/socket.h>
int socket(int family, int type, int protocol);
函数socket()创建用于通信的端点,并返回套接字的文件描述符。它使用了三个参数:
family指定所创建套接字的协议族。例如:
- AF_INET用于网络协议IPv4(仅IPv4)
- AF_INET6对于IPv6(在某些情况下,向后兼容IPv4)
- AF_UNIX用于本地套接字(使用文件)