精华内容
下载资源
问答
  • linux端口复用的问题

    千次阅读 2012-02-06 14:43:20
    解决性参考:Currently, Linux does ...而且小测试程序能够成功,和我的库测试程序的差别也就在这一点了,因此接受连接和发起连接的端口分开即可。 其他资料: 这个是捣乱最大的:http://www.ajaxstu.com/Linux
    解决性参考:Currently, Linux does
     not allow reuse of same local port for both TCP server and TCP client.而且小测试程序能够成功,和我的库测试程序的差别也就在这一点了,因此接受连接和发起连接的端口分开即可。

    其他资料:

    这个是捣乱最大的:http://www.ajaxstu.com/Linuxbiancheng/294968.html 请问:linux难道没有端口重用吗?我用SO_REUSEPORT报找不到

    已经搞定,需要改/usr/include/asm/socket.h:/* To add :#define SO_REUSEPORT 15 */

    http://hi.baidu.com/qiaoyong/blo ... b1f4190ff47707.html

    freebsd与linux下bind系统调用小结

    只考虑AF_INET的情况(同一端口指ip地址与端口号都相同)
    1.freebsd支持SO_REUSEPORT和SO_REUSEADDR选项,而linux只支持SO_REUSEADDR选项。
    2.freebsd下,使用SO_REUSEPORT选项,两个tcp的socket可以绑定同一个端口;同样,使用SO_REUSEPORT选项,两个udp的socket可以绑定同一个端口。
    3.linux下,两个tcp的socket不能绑定同一个端口;而如果使用SO_REUSEADDR选项,两个udp的socket可以绑定同一个端口。
    4.freebsd下,两个tcp的socket绑定同一端口,只有第一个socket获得数据。
    5.freebsd下,两个udp的socket绑定同一端口,如果数据包的目的地址是单播地址,则只有第一个socket获得数据,而如果数据包的目的地址是多播地址,则两个socket同时获得相同的数据。
    6.linux下,两个udp的socket绑定同一端口,如果数据包的目的地址是单播地址,则只有最后一个socket获得数据,而如果数据包的目的地址是多播地址,则两个socket同时获得相同的数据。

    http://cache.baidu.com/c?m=9d78d ... er=baidu&fast=y
    Unix网络API

    SO_REUSEADDR和SO_REUSEPORT
    SO_REUSEADDR提供如下四个功能:
    SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。 
    SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。 
    SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。 
    SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言(TCP不支持多播)。 
    SO_REUSEPORT选项有如下语义:
    此选项允许完全重复捆绑,但仅在想捆绑相同IP地址和端口的套接口都指定了此套接口选项才性。 
    如果被捆绑的IP地址是一个多播地址,则SO_REUSEADDR和SO_REUSEPORT等效。 
    使用这两个套接口选项的建议
    在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项; 
    当编写一个同一时刻在同一主机上可运行多次的多播应用程序时,设置SO_REUSEADDR选项,并将本组的多播地址作为本地IP地址捆绑。

    What is the difference between SO_REUSEADDR and SO_REUSEPORT?
    from:UNIX Socket FAQ 

    SO_REUSEADDR allows your server to bind to an address which is in a TIME_WAIT state. It does not allow more than one server to bind to the same address. It was mentioned that use of this flag can create a security risk because another server can bind to a the same port, by binding to a specific address as opposed to INADDR_ANY. The SO_REUSEPORT flag allows multiple processes to bind to the same address provided all of them use the SO_REUSEPORT option. 

    From Richard Stevens (rstevens@noao.edu):

    This is a newer flag that appeared in the 4.4BSD multicasting code (although that code was from elsewhere, so I am not sure just who invented the new SO_REUSEPORT flag).

    What this flag lets you do is rebind a port that is already in use, but only if all users of the port specify the flag. I believe the intent is for multicasting apps, since if you're running the same app on a host, all need to bind the same port. But the flag may have other uses. For example the following is from a post in February:

    From Stu Friedberg (stuartf@sequent.com):

    SO_REUSEPORT is also useful for eliminating the try-10-times-to-bind hack in ftpd's data connection setup routine. Without SO_REUSEPORT, only one ftpd thread can bind to TCP (lhost, lport, INADDR_ANY, 0) in preparation for connecting back to the client. Under conditions of heavy load, there are more threads colliding here than the try-10-times hack can accomodate. With SO_REUSEPORT, things work nicely and the hack becomes unnecessary. 

    I have also heard that DEC OSF supports the flag. Also note that under 4.4BSD, if you are binding a multicast address, then SO_REUSEADDR is condisered the same as SO_REUSEPORT (p. 731 of "TCP/IP Illustrated, Volume 2"). I think under Solaris you just replace SO_REUSEPORT with SO_REUSEADDR.

    From a later Stevens posting, with minor editing:

    Basically SO_REUSEPORT is a BSD'ism that arose when multicasting was added, even thought it was not used in the original Steve Deering code. I believe some BSD-derived systems may also include it (OSF, now Digital Unix, perhaps?). SO_REUSEPORT lets you bind the same address *and* port, but only if all the binders have specified it. But when binding a multicast address (its main use), SO_REUSEADDR is considered identical to SO_REUSEPORT (p. 731, "TCP/IP Illustrated, Volume 2"). So for portability of multicasting applications I always use SO_REUSEADDR.
    展开全文
  • 那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回“Address already in use”(即使使用了SO_REUSEADDR). 2.进程创建监听套接字,邦定一个指定端口,并接受了若干连接,为每个连接创建...

    下面建立的套接字都是tcp套接字


    1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接。那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回“Address already in use”(即使使用了SO_REUSEADDR).

    2.进程创建监听套接字,邦定一个指定端口,并接受了若干连接,为每个连接创建子进程为连接服务。杀死监听套接字所在进程,然后重新启动。重新启动的进程调用bind重新建立监听套接字。这次邦定只有在bind前指定了SO_REUSEADDR时才能成功。(因为直接杀进程,没有显式关闭套接字来释放端口,会等待一段时间后才可以重新use这个关口,解决办法就是用SO_REUSEADDR)。

    3.进程创建套接字socket1,邦定一个指定端口,使用这个套接字去connect另外一个监听套接字。连接建立。然后进程建立一个监听套接字socket2,邦定同一个端口。这次邦定只有在下面两个条件都满足的情况下才成功返回:为socket2邦定前指定SO_REUSEADDR,且为socket1邦定前也指定了SO_REUSEADDR。

    4.进程创建套接字socket1,邦定一个指定端口,去连接某个监听套接口。杀死进程,保证socket1一端执行主动关闭。那么重启进程后,除非上一个连接中socket1退出了TIME_WAIT状态,否则重启的进程在调用bind时候错误返回。

     

    同一个机器上一个端口PORT1,TCP socket1 绑定PORT1,然后TCP socket2绑定PORT1会失败;

    同一个机器上一个端口PORT1,TCP socket1 绑定PORT1,然后UDP socket2绑定PORT1会成功;

    同一个机器上一个端口PORT1,UDP socket1 绑定PORT1,然后UDP socket2绑定PORT1会失败;

     

    同一个机器上一个端口PORT1,TCP socket1 绑定PORT1,然后TCP socket2绑定PORT1会成功的条件是:

    两个套接字绑定前都调用SO_REUSEADDR

    int opt = 1;  

    // sockfd为需要端口复用的套接字  

    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const voidvoid *)&opt, sizeof(opt));

    但是假如socket1不仅bind了,还listen,并且accept成功了,这个时候socket2再次绑定到这个端口就会失败!!但是假如socket2是UDP的socket,那么socket2的bind还是会成功的!!!

     

    端口复用允许在一个应用程序可以把 n 个套接字绑在一个端口上而不出错。同时,这 n 个套接字发送信息都正常,没有问题。但是,这些套接字并不是所有都能读取信息,只有最后一个套接字会正常接收数据。

    端口复用最常用的用途应该是防止服务器重启时之前绑定的端口还未释放或者程序突然退出而系统没有释放端口。这种情况下如果设定了端口复用,则新启动的服务器进程可以直接绑定端口。如果没有设定端口复用,绑定会失败,提示ADDR已经在使用中——那只好等等再重试了,麻烦!

     

    复用真正是什么意义呢?这个我们可以看看TCP/IP里面TCP建立和断开链接的方法。

    我们知道,在TCP断开链接的时候我们需要四次握手来断开,而且当两端都关闭了read/write通道以后我们还是要等待一个TIME_WAIT时间。

    这就是SO_REUSEADDR的作用所在.

    其实这个选项就是告诉OS如果一个端口处于TIME_WAIT状态, 那么我们就不用等待直接进入使用模式, 不需要继续等待这个时间结束.

    那这样我们肯定要问,那为什么我们需要有这个TIME_WAIT时间啊?

    看看TCP/IP协议组我们就知道,这样做是为了让在网络中残余的TCP包消失, 也就是说, 如果我们没有等到这个时间就让OS把这个端口释放给其他的进程使用,别的进程很有可能就会收到上一个会话的残余TCP包,这样就会出现一系列的不可预知的错误.

    一、保证TCP协议的全双工连接能够可靠关闭
    二、保证这次连接的重复数据段从网络中消失

    那么什么时候我们可以用这个选项以加快我们进程的速度减小等待时间呢?

    这里有一些例子:

    SO_REUSEADDR可以用在以下四种情况下。
    (摘自《Unix网络编程》卷一,即UNPv1)
    1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启
    动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。
    2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但
    每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可
    以测试这种情况。
    3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个soc
    ket绑定的ip地址不同。这和2很相似,区别请看UNPv1。
    4、SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的
    多播,不用于TCP。

    1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。

        SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态

    2、SO_REUSEADDR和SO_REUSEPORT

    SO_REUSEADDR提供如下四个功能:

        SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。

        SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。

        SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。

        SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言(TCP不支持多播)。

    SO_REUSEPORT选项有如下语义:

        此选项允许完全重复捆绑,但仅在想捆绑相同IP地址和端口的套接口都指定了此套接口选项才行。

        如果被捆绑的IP地址是一个多播地址,则SO_REUSEADDR和SO_REUSEPORT等效。

    使用这两个套接口选项的建议:

        在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项;

    当编写一个同一时刻在同一主机上可运行多次的多播应用程序时,设置SO_REUSEADDR选项,并将本组的多播地址作为本地IP地址捆绑。

        if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,

       (const void *)&nOptval , sizeof(int)) < 0) ...

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

        A:这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。

        一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使用SO_REUSEADDR 选项。【2】

     

     

    展开全文
  • 在A机上进行客户端网络编程,加入它所使用的本地端口号是1234,如果没有开启端口复用的话,它用本地端口1234去连接B机再用本地端口连接C机时就不可以,若开启端口复用的话在用本地端口1234访问B机的情况下还可以用...
        在A机上进行客户端网络编程,加入它所使用的本地端口号是1234,如果没有开启端口复用的话,它用本地端口1234去连接B机再用本地端口连接C机时就不可以,若开启端口复用的话在用本地端口1234访问B机的情况下还可以用本地端口1234访问C机。若本地编程bind的本地端口号时0表示由系统分配端口,并开启端口复用的话表示系统分配的该端口号开启了复用。
        若是服务器程序中监听的端口,即使开启了复用,也不可以用该端口望外发起连接了。
    展开全文
  • freebsd与linux下bind系统调用小结只考虑AF_INET的情况(同一端口指ip地址与端口号都相同)1.freebsd支持SO_REUSEPORT和SO_REUSEADDR选项,而linux只支持SO_REUSEADDR选项。2.freebsd下,使用SO_REUSEPORT选项,两个...
     freebsd与linux下bind系统调用小结:

        只考虑AF_INET的情况(同一端口指ip地址与端口号都相同)
    • freebsd支持SO_REUSEPORT和SO_REUSEADDR选项,而linux只支持SO_REUSEADDR选项。
    • freebsd下,使用SO_REUSEPORT选项,两个tcp的socket可以绑定同一个端口;同样,使用SO_REUSEPORT选项,两个udp的socket可以绑定同一个端口。
    • linux下,两个tcp的socket不能绑定同一个端口;而如果使用SO_REUSEADDR选项,两个udp的socket可以绑定同一个端口。
    • freebsd下,两个tcp的socket绑定同一端口,只有第一个socket获得数据。
    • freebsd下,两个udp的socket绑定同一端口,如果数据包的目的地址是单播地址,则只有第一个socket获得数据,而如果数据包的目的地址是多播地址,则两个socket同时获得相同的数据。
    • linux下,两个udp的socket绑定同一端口,如果数据包的目的地址是单播地址,则只有最后一个socket获得数据,而如果数据包的目的地址是多播地址,则两个socket同时获得相同的数据。

        Unix网络API

    SO_REUSEADDR和SO_REUSEPORT

    SO_REUSEADDR提供如下四个功能:

    • SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。 
    • SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例(多个进程),只要每个实例捆绑一个不同的本地IP地址即可。在有多块网卡或者用IP Alias技术的机器可以测试这种情况。 对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。 
    • SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。 
    • SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言,不用于TCP(TCP不支持多播)。 

    SO_REUSEPORT选项有如下语义:

    • 此选项允许完全重复捆绑,但仅在想捆绑相同IP地址和端口的套接口都指定了此套接口选项才行。 如果被捆绑的IP地址是一个多播地址,则SO_REUSEADDR和SO_REUSEPORT等效。 

    使用这两个套接口选项的建议

    • 在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项。
    • 当编写一个同一时刻在同一主机上可运行多次的多播应用程序时,设置SO_REUSEADDR选项,并将本组的多播地址作为本地IP地址捆绑。


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

        A:这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。

        一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使用 SO_REUSEADDR 选项。



    if( getsockopt( sockfd , SOL_SOCKET, SO_REUSEPORT,
                     ( char *)&optval, &optlen ) < 0 )
                printf( " get socket error /n" );
    
      if( setsockopt( sockfd , SOL_SOCKET, SO_REUSEPORT,
             ( char *)&optval, sizeof( optval ) ) < 0 )
                printf( " set socket error /n" );
    
    编译报错:
    libtcp.c:1195: error: `SO_REUSEPORT' undeclared (first use in this function)
    libtcp.c:1195: error: (Each undeclared identifier is reported only once
    libtcp.c:1195: error: for each function it appears in.)

    需要改
    /usr/include/asm/socket.h:/* To add :#define SO_REUSEPORT 15 */



    What is the difference between SO_REUSEADDR and SO_REUSEPORT?
    from:UNIX Socket FAQ 

    SO_REUSEADDR allows your server to bind to an address which is in a TIME_WAIT state. It does not allow more than one server to bind to the same address. It was mentioned that use of this flag can create a security risk because another server can bind to a the same port, by binding to a specific address as opposed to INADDR_ANY. The SO_REUSEPORT flag allows multiple processes to bind to the same address provided all of them use the SO_REUSEPORT option. 

    From Richard Stevens (rstevens@noao.edu):

    This is a newer flag that appeared in the 4.4BSD multicasting code (although that code was from elsewhere, so I am not sure just who invented the new SO_REUSEPORT flag).

    What this flag lets you do is rebind a port that is already in use, but only if all users of the port specify the flag. I believe the intent is for multicasting apps, since if you're running the same app on a host, all need to bind the same port. But the flag may have other uses. For example the following is from a post in February:

    From Stu Friedberg (stuartf@sequent.com):

    SO_REUSEPORT is also useful for eliminating the try-10-times-to-bind hack in ftpd's data connection setup routine. Without SO_REUSEPORT, only one ftpd thread can bind to TCP (lhost, lport, INADDR_ANY, 0) in preparation for connecting back to the client. Under conditions of heavy load, there are more threads colliding here than the try-10-times hack can accomodate. With SO_REUSEPORT, things work nicely and the hack becomes unnecessary. 

    I have also heard that DEC OSF supports the flag. Also note that under 4.4BSD, if you are binding a multicast address, then SO_REUSEADDR is condisered the same as SO_REUSEPORT (p. 731 of "TCP/IP Illustrated, Volume 2"). I think under Solaris you just replace SO_REUSEPORT with SO_REUSEADDR.

    From a later Stevens posting, with minor editing:

    Basically SO_REUSEPORT is a BSD'ism that arose when multicasting was added, even thought it was not used in the original Steve Deering code. I believe some BSD-derived systems may also include it (OSF, now Digital Unix, perhaps?). SO_REUSEPORT lets you bind the same address *and* port, but only if all the binders have specified it. But when binding a multicast address (its main use), SO_REUSEADDR is considered identical to SO_REUSEPORT (p. 731, "TCP/IP Illustrated, Volume 2"). So for portability of multicasting applications I always use SO_REUSEADDR.


    from: http://www.cnblogs.com/mydomain/archive/2011/08/23/2150567.html

    展开全文
  • 本文作者:Spark(Ms08067内网安全小组成员)Spark微信(欢迎骚扰交流): 定义:端口复用是指不同的应用程序使用相同端口进行通讯。场景:内网渗透中,搭建隧道时,服...
  • 关于linux socket 编程 端口复用的理解

    千次阅读 2016-03-06 13:26:24
    端口复用的理解在linux socket网络编程中,大规模并发TCP或UDP连接时,经常会用到端口复用: int opt = 1; if(setsockopt(sockfd, SOL_SOCKET,SO_REUSEADDR, (const void *) &opt, sizeof(opt))){ perror(...
  • 1 - 端口复用 端口复用最常用的用途是: 防止服务器重启时之前绑定的端口还未释放 程序突然退出而系统没有释放端口 设置方法: int opt = 1; SO_REUSEADDR, setsockopt(sockfd, SOL_SOCKET, (const void *)&...
  • 解决性参考:Currently, ...而且小测试程序能够成功,和我的库测试程序的差别也就在这一点了,因此接受连接和发起连接的端口分开即可。 其他资料: 这个是捣乱最大的:http://www.ajaxstu.com/Linuxb
  • 端口复用

    千次阅读 2019-06-19 15:30:38
    端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。 2.SO_REUSEADDR的作用 ...
  • 为什么需要端口复用 我们直到,TCP连接在进行4次挥手断开连接时,为了确保最后一次ACK到达对端,保证对端正确关闭资源,以防止对傻傻等待浪费...表示端口号正在被占用,因为前一次的链接还没有被完全释放,通过指令可
  • linux常用端口号

    千次阅读 2018-08-08 21:21:14
    吐血整理所有常用端口,不全你来打我!   作者:ADreamClusive 来源: http://blog.csdn.net/u013943420/article/details/65938696   大家在学习计算机的时候,对于最常用的几个端口比如80端口肯定有很深的...
  • 在A机上进行客户端网络编程,假如它所使用的本地端口号是1234,如果没有开启端口复用的话,它用本地端口1234去连接B机再用本地端口连接C机时就不可以,若开启端口复用的话在用本地端口1234访问B机的情况下还可以用...
  • linux端口解释

    2017-04-21 08:11:23
    端口号码 / 层 ...TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat
  • 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误: Bind error: Address already in use 虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120...
  • Socket端口复用 先说为什么要使用socket端口复用?如果你遇到过这样的问题:server程序重启之后,无法连接,需要过一段时间才能连接上?  1.一个监听(listen)server已经启动  2.当有client有连接请求的时候,...
  • socket端口复用

    千次阅读 2015-03-04 11:13:20
    需要绑定的是同一个端口号 那么问题来了:当迅速关闭再重新创建socket之后bind会出错 根据网上资料,socket关闭后释放端口号需要一段延时  解决办法:采用socket端口复用的选项 if((pTsCfg->server_fd...
  • linux端口重用

    千次阅读 2014-05-21 09:26:58
    需要改/usr/include/asm/socket.h:/* To add :#define SO_REUSEPORT 15 *...只考虑AF_INET的情况(同一端口指ip地址与端口号都相同) 1.freebsd支持SO_REUSEPORT和SO_REUSEADDR选项,而linux只支持SO_REUSEADDR选项。
  • 如果想要在服务器断开连接时端口可以被使用,则需要使用端口复用功能,具体方法是使用setsockopt()设置socket描述符选项的S0_REUSEADDR为1,表示允许创建端口号相同,但IP地址不同的多个socket描述符。  在server...
  • 假设一个场景,当服务器需要更新时, 需要服务器主动关闭连接,这时候服务器就需要等待2msl才能使用这个端口,对于用户而言,2msl的时长太长,(linux的2msl时长大约有40s到60s),所以需要复用这个端口,使得服务端...
  • 本文介绍Python实现端口复用实例如下所示: #coding=utf-8 import socket import sys import select import threading\nhost='192.168.99.100' port=80 class Thread(threading.Thread): def __init__(self,buf,...
  • 可以通过 netstat -apn | grpe 端口号 查看服务器/客户端的状态。 2 状态转换分析 主动发起连接请求端:CLOSE – 发送SYN – SEND_SYN – 接收ACK、SYN – 发送ACK – ESTABLISHED(数据通信状态) 主动关闭连接...
  • 前面我们介绍到我们可以用进程注入的方法,借用其他应用的端口收发信息,从而达到穿墙的效果,那么今天介绍一种新的方法,叫做端口复用技术,他能够与其他应用绑定同一个端口,但同时进行端口复用的程序会接管之前...
  • socket IO端口复用

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,824
精华内容 7,929
关键字:

linux端口号复用

linux 订阅