int socket(int af, int type, int protocol);
int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
| 参数 | 说明 |
|---|
| af | 一个地址描述。常用AF_INET实现TCP/UDP协议。 |
| type | 指定socket类型。新套接口的类型描述类型。常用SOCK_STREAM(TCP)和SOCK_DGRAM(UDP)。 |
| protocol | 顾名思义,就是指定协议。套接口所用的协议。如调用者不想指定,可用0。 |
| type | 说明 |
|---|
| SOCK_STREAM | 流式套接口,传输的是字节流,每次传输的数据没有边界,它是面向连接的,底层使用TCP协议。 |
| SOCK_DGRAM | 数据报套接口,无连接,使用UDP协议。 |
| SOCK_RAW | // |
| SOCK_PACKET | // |
| SOCK_SEQPACKET | // |
| protocol | 说明 |
|---|
| IPPROTO_TCP | TCP传输协议 |
| IPPROTO_UDP | UDP传输协议 |
| IPPROTO_STCP | STCP传输协议 |
| IPPROTO_TIPC | TIPC传输协议 |
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
int opt = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&opt, sizeof(opt));
| 参数 | 说明 |
|---|
| sockfd | 标识一个套接口的描述字。 |
| level | 选项定义的层次。 |
| optname | 需设置的选项。 |
| optval | 指针,指向存放选项待设置的新值的缓冲区。 |
| optlen | optval缓冲区长度。 |
| level | 说明 |
|---|
| SOL_SOCKET | 基本套接口 |
| IPPROTO_TCP | TCP套接口 |
| IPPROTO_IP | IPv4套接口 |
| IPPROTO_IPV6 | IPv6套接口 |
| optname | 说明 | 数据类型 |
|---|
| SOL_SOCKET |
| SO_BROADCAST | 允许发送广播数据 | int |
| SO_DEBUG | 允许调试 | int |
| SO_DONTROUTE | 不查找路由 | int |
| SO_ERROR | 获得套接字错误 | int |
| SO_KEEPALIVE | 保持连接 | int |
| SO_LINGER | 延迟关闭连接 | struct linger |
| SO_OOBINLINE | 带外数据放入正常数据流 | int |
| SO_RCVBUF | 接收缓冲区大小 | int |
| SO_SNDBUF | 发送缓冲区大小 | int |
| SO_RCVLOWAT | 接收缓冲区下限 | int |
| SO_SNDLOWAT | 发送缓冲区下限 | int |
| SO_RCVTIMEO | 接收超时 | struct timeval |
| SO_SNDTIMEO | 发送超时 | struct timeval |
| SO_REUSERADDR | 允许重用本地地址和端口 | int |
| SO_TYPE | 获得套接字类型 | int |
| SO_BSDCOMPAT | 与BSD系统兼容 | int |
| IPPROTO_IP |
| IP_HDRINCL | 在数据包中包含IP首部 | int |
| IP_OPTINOS | IP首部选项 | int |
| IP_TOS | 服务类型 |
| IP_TTL | 生存时间 | int |
| IPPRO_TCP |
| TCP_MAXSEG | TCP最大数据段的大小 | int |
| TCP_NODELAY | 不使用Nagle算法 | int |
参考:https://www.cnblogs.com/gangzilife/p/9766114.html
内容有待完善,欢迎指正~