Linux的socket API主要包括以下几个关键函数:
- socket():创建一个新的socket。这个函数需要指定协议族(如AF_INET表示IPv4,AF_INET6表示IPv6)、socket类型(如SOCK_STREAM表示TCP流,SOCK_DGRAM表示UDP数据报)和协议号(通常为0,表示由操作系统自动选择合适的协议)。成功时返回一个非负整数,表示socket的文件描述符;失败时返回-1并设置errno。
- bind():将socket与一个本地地址和端口绑定。这个函数需要传入一个socket文件描述符、一个指向sockaddr结构体的指针(包含了地址和端口信息)以及该结构体的大小。成功时返回0;失败时返回-1并设置errno。
- connect():连接到一个远程地址和端口。这个函数需要传入一个socket文件描述符、一个指向sockaddr结构体的指针(包含了远程地址和端口信息)以及该结构体的大小。成功时返回0;失败时返回-1并设置errno。
- listen():将socket设置为监听模式,等待客户端连接。这个函数需要传入一个socket文件描述符和一个整数backlog,表示可以同时处理的最大连接请求数。成功时返回0;失败时返回-1并设置errno。
- accept():接受一个来自客户端的连接请求。这个函数需要传入一个socket文件描述符、一个指向sockaddr结构体的指针(用于存储客户端地址信息)以及一个指向整数的指针(用于存储客户端地址结构体的大小)。成功时返回一个新的socket文件描述符,表示与客户端的连接;失败时返回-1并设置errno。
- send()/sendto():发送数据。send()函数用于TCP连接,需要传入一个socket文件描述符、一个指向数据的指针、数据长度以及一组标志位。sendto()函数用于UDP数据报,除了需要传入一个socket文件描述符、一个指向数据的指针、数据长度以外,还需要传入一个指向目标地址的指针和目标地址结构体的大小。成功时返回实际发送的字节数;失败时返回-1并设置errno。
- recv()/recvfrom():接收数据。recv()函数用于TCP连接,需要传入一个socket文件描述符、一个指向接收缓冲区的指针、缓冲区大小以及一组标志位。recvfrom()函数用于UDP数据报,除了需要传入一个socket文件描述符、一个指向接收缓冲区的指针、缓冲区大小以外,还需要传入一个指向源地址的指针和源地址结构体的大小。成功时返回实际接收的字节数;失败时返回-1并设置errno。
- close():关闭一个socket。这个函数需要传入一个socket文件描述符。成功时返回0;失败时返回-1并设置errno。
这些函数是使用Linux socket API进行网络编程的基础,可以实现各种网络应用,如TCP服务器、UDP客户端等。