socket IO端口复用

简介: socket IO端口复用

在网络应用中(如Java Socket Server),当服务关掉立马重启时,不少时候会提示端口仍被占用(因端口上有处于TIME_WAIT的链接)。此时可经过 SO_REUSEADDR 参数( socket.setReuseAddress(true); )来使得服务关掉重启时立马可以使用该端口,而不是提示端口占用。

若是端口忙,但TCP状态位于 TIME_WAIT ,能够重用 端口。若是端口忙,而TCP状态位于其余状态,重用端口时依旧获得一个错误信息, 抛出“Address already in use: JVM_Bind”。若是你的服务程序中止后想当即重启,不等60秒,而新套接字依旧 使用同一端口,此时 SO_REUSEADDR 选项很是有用。必须意识到,此时任何非期 望数据到达,均可能致使服务程序反应混乱,不过这只是一种可能,事实上很不可能。

在linux socket网络编程中,大规模并发TCP或UDP链接时,常常会用到端口复用:

int opt = 1;
 if(setsockopt(sockfd, SOL_SOCKET,SO_REUSEADDR, (const void *) &opt, sizeof(opt))){
    perror("setsockopt");
    return -1;
}

在A机上进行客户端网络编程,假如它所使用的本地端口号是1234,若是没有开启端口复用的话,它用本地端口1234去链接B机再用本地端口链接C机时就不能够,若开启端口复用的话在用本地端口1234访问B机的状况下还能够用本地端口1234访问C机。如果服务器程序中监听的端口,即便开启了复用,也不能够用该端口望外发起链接了。

编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思?

A:这个套接字选项通知内核,若是端口忙,但TCP状态位于 TIME_WAIT ,能够重用端口。若是端口忙,

而TCP状态位于其余状态,重用端口时依旧获得一个错误信息,指明"地址已经使用中"。若是你的服务程序中止

后想当即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR 选项很是有用。必须意识到,此时任何

非指望数据到达,均可能致使服务程序反应混乱,不过这只是一种可能,事实上很不可能。

当两个socket的address和port相冲突,而你又想重用地址和端口,则旧的socket和新的socket都要已经被设置了SO_REUSEADDR特性,只有二者之一有这个特性仍是有问题的。

一、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。

二、SO_REUSEADDR容许同一port上启动同一服务器的多个实例(多个进程)。但每一个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器能够测试这种状况。

三、SO_REUSEADDR容许单个进程绑定相同的端口到多个socket上,但每一个socket绑定的ip地址不一样。这和2很类似,区别请看UNPv1。

四、SO_REUSEADDR容许彻底相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP

相关文章
|
3月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
104 0
|
3月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
122 1
Linux C/C++之IO多路复用(aio)
|
7月前
|
IDE Linux 程序员
技术经验解读:【转】IO空间,IO端口,MMIO
技术经验解读:【转】IO空间,IO端口,MMIO
372 0
|
3月前
|
Linux C++
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
47 0
Linux C/C++之IO多路复用(poll,epoll)
|
3月前
|
Java Linux
【网络】高并发场景处理:线程池和IO多路复用
【网络】高并发场景处理:线程池和IO多路复用
71 2
|
3月前
|
监控 网络协议 Java
IO 多路复用? 什么是 IO 多路复用? 简单示例(日常生活)来解释 IO 多路复用 一看就懂! 大白话,可爱式(傻瓜式)教学! 保你懂!
本文通过日常生活中的简单示例解释了IO多路复用的概念,即一个线程通过监控多个socket来处理多个客户端请求,提高了效率,同时介绍了Linux系统中的select、poll和epoll三种IO多路复用的API。
188 2
|
4月前
|
消息中间件 NoSQL Java
面试官:谈谈你对IO多路复用的理解?
面试官:谈谈你对IO多路复用的理解?
57 0
面试官:谈谈你对IO多路复用的理解?
|
4月前
|
网络协议 Java Linux
高并发编程必备知识IO多路复用技术select,poll讲解
高并发编程必备知识IO多路复用技术select,poll讲解
|
4月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
56 0
|
4月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
57 0

热门文章

最新文章