内容简介:UNP 学习笔记——基本 TCP 套接字编程
1、socket
函数中 family
、type
、protocol
等参数的选项有哪些?
family
AF_INET
IPV4 协议AF_INET6
IPV6 协议AF_LOCAL
Unix 域AF_ROUTE
路由套接字AF_KEY
秘钥套接字
type
SOCK_STREAM
字节流套接字SOCK_DGRAM
数据报套接字SOCK_SEQPACKET
有序分组套接字SOCK_RAW
原始套接字
protocol
IPPROTO_TCP
TCP 传输协议IPPROTO_UDP
UDP 传输协议IPPROTO_SCTP
SCTP 传输协议
2、调用 connect
函数出错返回有哪几种情况?
- 若TCP客户没有收到
SYN
分节的响应, 返回ETIMEDOUT
错误。 - 客户发送
SYN
分节后,收到RST
响应,表明在指定的端口上没有进程在等待与之连接, 返回ECONNREFUSES
错误。 - 若客户发送的
SYN
在中间某个路由器上引起了一个destination unreachable
ICMP
错误. 返回EHOSTUNREACH
或ENETUNTREACH
错误
产生RST的三个条件:
- 目的地为某端口的SYN到达,然而该端口上没有正在监听的服务器;
- TCP想取消一个已有连接;
- TCP接收到一个根本不存在的连接上的分节。
3、bind
函数地址、端口绑定的原则?
4、listen
函数中 backlog
参数的意义?
backlog: 内核应该为相应套接字排队的最大连接个数。
内核为每个监听的套接字维护两个队列:
- 未完成连接队列:由某个客户端发出并到达服务器,而服务器正在等待完成相应的TCP三路握手过程,这些套接字处于
SYN_RCD
状态 - 已完成连接队列:每个已完成三次握手过程的客户对应其中一项。这些套接字处于ESTABLISHED状态。
当来自客户的 SYN
到达时,TCP
将会在未完成队列中创建一个新项,然后响应三次握手的第二个分节。这一项一直保留在未完成连接队列中,直到三次握手的第三个分节到达或超时。
如果三次握手正常完成,该项就从未完成队列移到已完成连接队列的队尾。当进程调用 accecp
时,已完成连接队列中的对头项将会返回给进程,或者如果该队列为空,那么进程将会被投入睡眠。
5、getsockname
函数的用途有哪些?
TCP
客户端:connect
成功后,getsockname
用于返回由内核赋予的该连接的本地 IP 地址和本地端口号TCP
服务端:- 以端口号 0 调用
bind
函数后,getsockname
函数用于返回由内核赋予的本地端口号 - 以通配 IP 地址调用
bind
函数的服务器,与某个客户的连接一旦建立,getsockname
就可以用于返回由内核赋予该连接的本地 IP 地址。但是,套接字描述符参数必须是已连接套接字的描述符,而不是监听套接字的描述符。
- 以端口号 0 调用
6、getpeername
函数的用途有哪些?
TCP
服务器是由 accept
的某个进程通过调用 exec
执行程序时,它能够获取客户身份的唯一途径便是调用 getpeername
.
API
int socket(int family, int type, int protocol);
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
int bind(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
int listen (int sockfd, int backlog)
int accept(int sockfd,struct sockaddr *cliaddr, socklen_t *addrlen)
int close(int sockfd)
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen)
int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen)
以上所述就是小编给大家介绍的《UNP 学习笔记——基本 TCP 套接字编程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 《UNIX网络编程》笔记 - 套接字选项/UDP套接字
- Asio:创建被动套接字
- UNP 学习笔记——套接字选项
- 原始套接字打造 ping 命令
- UNP 学习笔记——套接字编程简介
- c# – 配置套接字ACK超时?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。