套接字函数
socket()
创建套接字描述符,指定协议族、套接字类型和协议类型。
1 |
|
- 参数:
domain:协议族,如AF_INET(IPv4)、AF_INET6(IPv6)、AF_UNIX(本地通信)。type:套接字类型,如SOCK_STREAM(TCP流)、SOCK_DGRAM(UDP数据报)、SOCK_RAW(原始套接字)。protocol:协议类型,通常设为0,由系统根据前两个参数自动选择。
- 返回值:成功返回套接字描述符(非负整数),失败返回
-1,错误码存入errno。
bind()
将套接字与本地IP地址和端口绑定(服务端常用)。
1 | int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); |
- 参数:
sockfd:由socket()创建的套接字描述符。addr:指向sockaddr结构体的指针(需转换为特定地址结构体,如IPv4用sockaddr_in)。addrlen:地址结构体的长度(如sizeof(struct sockaddr_in))。
- 返回值:成功返回
0,失败返回-1,错误码存入errno。
listen()
将套接字设为监听状态。
1 | int listen(int sockfd, int backlog); |
- 参数:
sockfd:已绑定的套接字描述符。backlog:等待连接队列的最大长度(通常不超过128)。
- 返回值:成功返回
0,失败返回-1,错误码存入errno。
accept()
服务端接受客户端连接请求,返回新套接字用于数据传输。
1 | int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); |
参数:
sockfd:监听套接字描述符。addr:存储客户端地址的结构体指针(传出参数)。addrlen:地址结构体长度的指针(传入时指定缓冲区大小,传出时返回实际大小)。
返回值:成功返回新套接字描述符,失败返回
-1,错误码存入errno。
connect()
客户端主动发起TCP连接请求。
1 | int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); |
- 参数:
sockfd:客户端套接字描述符。addr:指向服务端地址结构体的指针(如sockaddr_in)。addrlen:地址结构体长度。
- 返回值:成功返回
0,失败返回-1,错误码存入errno。
send()
在已连接的TCP套接字上发送数据。
1 | ssize_t send(int sockfd, const void *buf, size_t len, int flags); |
- 参数:
sockfd:连接成功的套接字描述符。buf:数据缓冲区指针。len:数据长度。flags:控制标志(如MSG_WAITALL阻塞直到数据接收完整)。
- 返回值:成功返回实际发送的字节数,失败返回
-1,错误码存入errno。
recv()
在已连接的TCP套接字上接收数据。
1 | ssize_t recv(int sockfd, void *buf, size_t len, int flags); |
- 参数:
sockfd:连接成功的套接字描述符。buf:数据缓冲区指针。len:数据长度。flags:控制标志(如MSG_WAITALL阻塞直到数据接收完整)。
- 返回值:成功返回实际接收的字节数,失败返回
-1,错误码存入errno。
sendto()
用于无连接的UDP套接字发送数据。
1 | ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); |
- 参数:
dest_addr:目标地址结构体指针。addrlen:地址结构体长度。
- 返回值:成功返回实际发送的字节数,失败返回
-1,错误码存入errno。
recvfrom()
用于无连接的UDP套接字接收数据。
1 | ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); |
- 参数:
src_addr:来源地址结构体指针(传出参数)。
- 返回值:成功返回实际接收的字节数,失败返回
-1,错误码存入errno。
close()
关闭套接字并释放资源。
1 | int close(int sockfd); |
- 参数:
sockfd:套接字描述符。
- 返回值:成功返回
0,失败返回-1,错误码存入errno
shutdown()
半关闭连接。
1 | int shutdown(int sockfd, int how); |
- 参数:
how:关闭方式,如SHUT_RD(关闭读)、SHUT_WR(关闭写)、SHUT_RDWR(关闭读写)。
- 返回值:成功返回
0,失败返回-1,错误码存入errno。