基本TCP套接字编程
程序员文章站
2022-07-14 20:34:33
...
基本套接字函数
socket函数
socket
函数用于创建一个套接字描述符,定义在头文件sys/socket.h
中:
/*若成功返回非负数整数(套接字描述符),若失败返回-1*/
int socket(int family, int type, int protocol);
-
family
参数指明协议族(协议族 VS 地址族):
family | 说明 |
---|---|
AF_INET | IPv4协议 |
AF_INET6 | IPv6协议 |
AF_LOCAL | Unix域协议 |
AF_ROUTE | 路由套接字 |
AF_KEY | **套接字 |
-
type
参数指明套接字类型:
type | 说明 |
---|---|
SOCK_STREAM | 字节流套接字 |
SOCK_DGRAM | 数据报套接字 |
SOCK_SEQPACKET | 有序分组套接字 |
SOCK_RAW | 原始套接字 |
-
protocol
参数指明某个协议类型,或者设为0,以选择给定family
和type
组合的系统默认值:
protocol | 说明 |
---|---|
IPPROTO_TCP | TCP传输协议 |
IPPROTO_UDP | UDP传输协议 |
IPPROTO_SCTP | SCTP传输协议 |
注意并非所有的family和type组合都是有效的,下表给出了一些有效组合:
AF_INET | AF_INET6 | AF_LOCAL | AF_ROUTE | AF_KEY | |
---|---|---|---|---|---|
SOCK_STREAM | TCP或SCTP | TCP或SCTP | 是 | ||
SOCK_DGRAM | UDP | UDP | 是 | ||
SOCK_SEQPACKET | SCTP | SCTP | 是 | ||
SOCK_RAW | IPv4 | IPv6 | 是 | 是 |
参数family和type还有其他值,例如Linux支持一个新的套接字类型
SOCK_PACKET
,支持对数据链路的访问。
connect函数
TCP客户端调用connect
函数来建立与TCP服务器的连接:
#include <sys/socket.h>
/*成功返回0,否则返回-1*/
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);