`

Socket参数说明-SO_REUSEADDR

阅读更多
SO_REUSEADDR 套接字选项:使两个server socket可以监听同一个端口 默认情况下,套接字不同一个正在使用的本地地址绑定到一起。但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用。通过第7章的学习,大家已经知道,每个连接都是通过它的本地及远程地址的组合,“独一无二”地标识出来的。针对我们想要连接的地址,只要能用极其细微的差异(比如T C P / I P中采用不同的端口号),来维持这种“独一无二”或者“唯一”的特点,绑定便是允许的。唯一例外的是监听套接字。两个独立的套接字不可与同一个本地接口(在T C P / I P的情况下,则是端口)绑定到一起,以等待进入的连接通知。 假定两个套接字都在同一个端口上进行监听,那么到底由谁来接收一个进入连接通知呢?对于这个问题,目前尚无一种正式规范提出了解决方案。在T C P的环境下,假如服务器关闭,或异常退出,造成本地地址和端口均进入T I M E _ WA I T状态,那么S O _ R E U S E A D D R 这个套接字选项便显得非常有用。在T I M E _ WA I T状态下,其他任何套接字都不能与那个端口绑定到一起。但假若设置了该选项,服务器便可在重新启动之后,在相同的本地接口及端口上进行监听。 将服务端socket套接字设置上SO_REUSEADDR属性,代码如下: //设置socket套接字的属性:允许多个设备在同一个本地网中监听同一下端口 int one = 1; if (sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) { printf("setsockopt SO_REUSEADDR error\n"); close(sock); return; } 这么设置套接字的作用是:允许两个server端的套接字在同一个本地网段中监听同一个端口.
分享到:
评论

相关推荐

    关于在socket编程中设置套接字选项so_reuseaddr

    socket编程中设置套接字选项so_reuseaddr,是设计稳定的网络通讯程序的基础.

    SO_REUSEADDR配置 & TCP_NODELAY1

    SO_REUSEADDR配置 & TCP_NODELAY1

    Echo-service-using-TCP-sockets-.rar_Keepalive_Linger_SO_KEEPALIV

    Echo service using TCP sockets between two systems with socket options SO_REUSEADDR, SO_KEEPALIVE, TCP_NODELAY and SO_LINGER

    详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别

    下面小编就为大家分享一篇详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    PHP开启SCOKETS源码websocket.php

    socket_set_option($server,SOL_SOCKET,SO_REUSEADDR,1); socket_bind($server,$address,$port); socket_listen($server); $this->show('服务启动:'.date('Y-m-d H:i:s')); $this->show('监听端口:'.$address.'...

    php使用event扩展的io复用测试的示例

    先要安装event扩展,这样才可以使用libevent...stream_context_set_option($context,'socket','so_reuseaddr',1); //设置连接重用 //sock_set_option($this->server, SOL_SOCKET, SO_REUSEADDR, 1); //复用还处于 TIME_

    linger-tools:用于测试 SO_LINGER 的工具

    关于 linger-tools: 此处编写的工具是为执行 SO_LINGER 套接字选项的跨平台测试而编写的。 您可以在以下博客文章中找到我们的测试结果: 我们发布代码的主要动机是让其他人可以复制我们执行的测试或针对新平台进行...

    sam-tcp_proxy:安全且最小的TCP代理

    VAR_FINAL_COMMAND ='socat TCP-LISTEN:$ {VAR_LISTEN_PORT:-$ VAR_PORT},fork,reuseaddr TCP:$ VAR_HOST:$ VAR_PORT' VAR_LINUX_USER =“代理” 运行时变量 VAR_HOST VAR_LISTEN_PORT(可选) 能力 可以...

    python实现聊天小程序

    本文实例为大家分享了python实现聊天小程序的具体代码,供大家参考,具体内容如下 我这里实现的是客户端与服务端进行通信的功能,比较...s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, por

    python实现Linux异步epoll代码

    if __name__==”__main__”: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.bind((“”,20123)) s.listen(10) epoll=select.epoll() print s...

    python实现的udp协议Server和Client代码实例

    UDP Echo Server – udpserver.py import socket, traceback host = ” port = 54321 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s....

    delphi socket call php socket 例子

    socket_set_option ( $sock , SOL_SOCKET , SO_REUSEADDR , 1 ); // "bind" the socket to the address to "localhost", on port $port // so this means that all connections on this port are now our ...

    Python Web静态服务器非堵塞模式实现方法示例

    本文实例讲述了Python Web静态服务器非堵塞模式实现方法。分享给大家供大家参考,具体如下: 单进程非堵塞 模型 ... server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1) server_socket.bind(('', 7890))

    Java socket 的参数选项解读

     1、java socket参数选项总览  在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x0001; 2 3 public final static int SO_BINDADDR = 0x000F; 4 5 public final static int SO_...

    ComputerNetwork:基于TCP的多用户聊天应用程序

    计算机网络 基于TCP的多用户聊天应用程序2018 介绍 :此应用程序是在Ubuntu(Linux x86_64)上的Python3.6.5中编程的...2)setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 此函数显示创建的套接字的规范。

    python基于socket进行端口转发实现后门隐藏的示例

    思想: ...否则转发到8888端口执行系统命令。 8888端口监听代码: #!/usr/bin/env python from socket import * import os\nHOST='127.0.0.1' ...tcpSerSock.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) tcpSerSock.bin

    python实现简单的socket server实例

    本文实例讲述了python实现简单的socket server的方法。...myServerSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) myServerSocket.bind((host, port)) myServerSocket.listen(1) print "Server is

    Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】

    本文实例讲述了Python实现的服务器。...serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) localAddr = ('', 7788) #绑定端口ip serSocket.bind(localAddr) #监听 serSocket.listen(5) while True: print('-

    Python使用协程进行 IO 并发程序示例

    “”” gevent server 基于协程 的 TCP 并发 思路: 1. 将每个客户端的处理 设置为 协程函数 2. 让socket 模块下的 阻塞 可以出发协程跳转...s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 可重复使用端口号 s.bind((

Global site tag (gtag.js) - Google Analytics