相关疑难解决方法(0)

如何将TCP连接重新连接到同一端口?

机器是RHEL 5.3(内核2.6.18).

有时我在netstat中注意到我的应用程序有连接,当本地地址外地址相同时建立了TCP连接.

这里同样的问题,有人报道过别人.

症状与链接中描述的相同 - 客户端连接到本地运行的服务器的端口X端口.一段时间后,netstat显示客户端已连接127.0.0.1:X127.0.0.1:X

怎么可能?

编辑01

同时打开导致问题(非常感谢Hasturkun).您可以在从SYN_SENT状态转换为SYNC_RECEIVED的经典TCP状态图中看到它

linux networking tcp

22
推荐指数
2
解决办法
8118
查看次数

为什么套接字connect()到它自己的短暂端口?

connect()如果我使用自动分配的临时端口(5000-65534)范围内的端口连接到localhost,我可以可靠地获得一个Winsock套接字.具体来说,Windows似乎有一个系统范围的滚动端口号,它将尝试将其指定为客户端套接字的本地端口号.如果我创建套接字直到分配的数字刚好低于我的目标端口号,然后重复创建套接字并尝试连接到该端口号,我通常可以让套接字连接到自己.

我首先在一个重复尝试连接到localhost上的某个端口的应用程序中发生这种情况,当服务没有监听时,它很少成功建立连接并接收它最初发送的消息(恰好是Redis PING命令).

一个例子,在Python中(无需监听目标端口即可运行):

import socket

TARGET_PORT = 49400

def mksocket():
    return socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)

while True:
    sock = mksocket()
    sock.bind(('127.0.0.1', 0))
    host, port = sock.getsockname()
    if port > TARGET_PORT - 10 and port < TARGET_PORT:
        break
    print port

while port < TARGET_PORT:
    sock = mksocket()
    err = None
    try:
        sock.connect(('127.0.0.1', TARGET_PORT))
    except socket.error, e:
        err = e
    host, port = sock.getsockname()
    if err:
        print 'Unable to connect to port %d, used local port %d: %s' % (TARGET_PORT, …
Run Code Online (Sandbox Code Playgroud)

sockets windows port winsock

6
推荐指数
1
解决办法
1929
查看次数

标签 统计

linux ×1

networking ×1

port ×1

sockets ×1

tcp ×1

windows ×1

winsock ×1