基本的TCP编程

简介:
int socket(int family,int type,int protocol);

family:

AF_INET ipv4协议

AF_INET6 ipv6协议

AF_LOCAL unix域协议

AF_ROUTE 路由套接口

type:

SOCK_STREAM 字节流套接口

SOCK_DGRAM 数据包套接口

SOCK_RAW 原始套接口

返回一个很小的非负整数,叫做套接口描述字,简称套接字sockfd

AF_XXX地址族

PF_XXX协议族

connect()建立一个TCP连接

三次握手出错:

1 发送无应答,6秒后再次发送,无应答,24秒后再次发送,若75秒钟后仍未相应,则返回错误

2 硬错:SYN返回RST:SYN到达端口,但没有监听进程、TCP想取消一个已有的连接、TCP接受了一个根本不存在的连接

3 软错:中间路由器产生目的地不可达的ICMP错误

bind() 给套接口分配一个本地协议地址

struct sockaddr_in servaddr;
servaddr.sin_addr.s_addr = htol(INADDR_ANY);

头文件<netinet/in.h>定义的所有INADDR_常值都是主机字节序,所以应该使用htol

捆绑非通配IP地址的好处是:由内核将给定的目的IP地址解复用后送往服务器进程

int listen(int sockfd,int backlog);

listen()仅被TCP服务器使用:在调用socket bind之后,accept之前

1 将未连接的套接口转换成被动套接口,指示内核应接受只想此套接口的连接请求。

2 函数第二个参数规定了,套接口排队的最大连接个数

对于给定的监听套接口,有两个队列:

1 未完成连接队列 incomplete connection queue SYN_RCVD状态

2 已完成连接队列 complete connection queue ESTABLISHED状态

accept() TCP服务器调用,从已完成的队列头返回下一个已完成的连接。若完成队列为空,则睡眠

int accept(int sockfd,struct sockaddr *cliaddr,socklen_t * addrlen);

addrlen是值-结果参数

fork()一次调用两个返回值:

1 父进程调用返回的是子进程的ID

2 子进程调用返回0

close()将套接口设置为已关闭标记,并立即返回到进程。

描述字访问计数,用于设置父进程的访问状况。

本文转自博客园xingoo的博客,原文链接:基本的TCP编程,如需转载请自行联系原博主。

相关文章
|
网络协议
海思3559万能平台搭建:TCP客户端网口编程
海思3559万能平台搭建:TCP客户端网口编程
120 0
|
网络协议
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
108 0
|
网络协议 Linux 网络性能优化
Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理
你在应用层上想要发送一个信息,但是我在底层可能是通过发送多次、甚至有触发了超时重传等等。而站在用户的角度呢,你不用去管它,我传输层不管怎么发,反正最终把你的数据发出去就可以了。也就是说,应用层的传输和底层传输层的并不是一对一、一一对应的关系。
144 0
Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理
|
网络协议 安全 Linux
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)
本节我们来介绍TCP连接的建立和断开。我们主要介绍两个过程、两个状态。
174 0
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)
|
网络协议 Java 大数据
网络编程:socket—基于 TCP 协议编程|学习笔记
快速学习网络编程:socket—基于 TCP 协议编程
111 0
|
存储 网络协议 算法
|
网络协议 安全 测试技术
TCP 编程快速入门案例分析 | 学习笔记
快速学习 TCP 编程快速入门案例分析
131 0
TCP 编程快速入门案例分析 | 学习笔记
|
域名解析 网络协议 Unix
TCP 编程-服务器监听 | 学习笔记
快速学习 TCP 编程-服务器监听
146 0
TCP 编程-服务器监听 | 学习笔记
|
网络协议 C#
C#编程-60:简单的TCP通讯实例
C#编程-60:简单的TCP通讯实例
133 0
C#编程-60:简单的TCP通讯实例
|
网络协议 API
【从零开始的嵌入式生活】网络编程2——TCP编程
【从零开始的嵌入式生活】网络编程2——TCP编程
【从零开始的嵌入式生活】网络编程2——TCP编程