Articles of tcp

TCP RST段向套接字点对点发送多less个情况?

我知道,当一个进程崩溃时,现有的TCP套接字将被放弃,通过发送RST包(段)到其他对端,相关的套接字fd在其他对端将收到RST包。 还有其他情况下RST数据包发出? 例如,如果一个进程在套接字fd上调用close(),但在该套接字上留下未读数据,它是否也会通过该套接字fd将RST数据包(段)发送给其他节点?

通过网站IP的TCP连接

有没有办法设置一个TCPListener使用网站的IP地址,而不是一个计算机的IP地址。 例如,不是使用127.0.0.1,而是使用74.125.233.95(Google的IP地址,这里只是用到了这个例子)。 这是我尝试的代码: Dim hostname As IPHostEntry = Dns.GetHostByName(TextBox1.Text) Dim ip As IPAddress() = hostname.AddressList Dim port As Integer Dim localAddr As IPAddress Dim server As TcpListener Try port = 8080 server = New TcpListener(ip(0), port) server.Start() RichTextBox1.AppendText("Listening on : " & ip(0).ToString & vbNewLine) Catch ex As Exception RichTextBox1.AppendText(ip(0).ToString & " : " & […]

我如何在Linux中find一个开放的端口?

是否有某种系统调用会返回端口是否可用? 或者至less有一个传统的做法,不会使你的过程成为一个坏公民? 目前这是我如何做到这一点: def find_open_port(min_port, max_port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) for port in range(min_port, max_port): if port > max_port: raise IOError('Could not find a free port between {0} and {1}'.format(min_port, max_port)) try: s.bind(('localhost', port)) return port except socket.error as error: if error.strerror == 'Address already in use': continue else: raise error 呸!

如何在Linux中创build很多(我的意思是很多)套接字?

我试图用不同的语言(C#,Java,C ++,PHP)来创build一个简单的程序来连接到一个服务器,所有的行为都是一样的。 所以我相信这个问题更多的是一个操作系统级的东西。 基本上我想程序连接到TCP套接字的服务器,并发送1个字节,然后closures套接字。 这需要每秒完成数千次,并持续一段时间。 这是为了对服务器进行基准testing。 到目前为止,在几千个客户端套接字之后,系统完全停止。 它只能在一分钟左右冷却后才能开始创build套接字。 我已经确定,在传输之后我已经closures了每个sockets。 现在,这类问题对像Apache这样的服务器很熟悉,其中的工具(如ab / siege)被build议使用keep-alive协议对Apache进行基准testing。 也就是说,创buildless量的TCP连接,但通过它们发出多个请求来达到基准testing的目的。 然而,在我们的情况下,这是不可能的,因为我们的专有服务器不提供HTTP服务,也不支持HTTP 1.1保持活动模式。 那么如何实现呢? 我已经检查了以下限制 ulimit被设置为非常高的数字 通过将/proc/sys/net/ipv4/tcp_rw_recycle和/proc/sys/net/ipv4/tcp_rw_reuse为1来消除TCP TIME_WAIT 。(我确实已经用netstat确认了没有TIME_WAIT套接字) 这与线程/进程数量的限制无关。 我已经尝试重新启动我的客户端应用程序,它是一样的。 一旦操作系统拒绝新的套接字,没有任何帮助。 PS。 这不是服务器端的限制。 我们通过购买另一个盒子并在第一个客户端盒子拒绝插入新套接字时运行相同的客户端代码来testing这一点。 服务器处理得很好。 我们不想购买5-10盒,并在它们之间旋转来克服这个问题。 OS:Fedora 10 Linux 2.6.24-23-xen#1 SMP

在C中closuresTCP侦听套接字

假设你有一个侦听TCP端口的套接字,并且有一些客户端被连接。 当在C中发出sock_close(fd)并尝试在同一个端口上再次绑定时,绑定失败。 在“netstat -plutnoa”中可以看到一些TIME_WAIT状态,例如: tcp 0 0 127.0.0.1:4567 127.0.0.1:32977 TIME_WAIT – timewait (17.12/0/0) 那么,如何正确断开服务器套接字并立即重新连接到相同的端口?

确定客户端绑定的TCP端口号

我创build了一个TCP套接字,而不打扰绑定到[socket.sin_port = 0]的端口号。 不过后来如果我想打印客户端的端口号,我该怎么做呢? 客户端C应用程序(在Linux上)创build了许多连接到服务器的客户端。 为了debugging问题,我捕捉飘渺的stream量。 我想在问题出现时打印日志中的端口号,以便轻松过滤。 任何帮助,将不胜感激。 -Prabhu

为什么STRACE显示EAGAIN(资源暂时不可用)

以下是我得到的序列 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 7 setsockopt(7, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(7, SOL_SOCKET, SO_SNDBUF, [32120], 4) = 0 getsockopt(7, SOL_SOCKET, SO_SNDBUF, [30064835312], [4]) = 0 setsockopt(7, SOL_SOCKET, SO_SNDBUF, [64240], 4) = 0 getsockopt(7, SOL_SOCKET, SO_SNDBUF, [30064899552], [4]) = 0 stat("/etc/localtime", {st_dev=makedev(8, 1), st_ino=229001, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=265, st_atime=2013/07/15-06:30:03, st_mtime=2012/06/25-23:46:43, st_ctime=2012/06/25-23:46:43}) […]

在testserver上,使用Select()连接的Linux TCP失败

我的问题是:我在Linux中编程接口来通过以太网控制GPIB控制器。 要做到这一点,我打开一个TCP套接字,只是发送命令到控制器。 到目前为止,这工作得很好。 我在为Interface写某种unit testing的时候出现了这个问题:为了检查我在一个单独的线程中使用了一个来自boost lib的tcp接受器,并且连接到它而不是实际的控制器。 这也正在工作,但是只要来自接口的connect()调用被阻塞。 但是,因为我需要connect()调用指定的超时,我必须连接到select()函数: // Open TCP Socket m_Socket = socket(PF_INET,SOCK_STREAM,0); if( m_Socket < 0 ) { m_connectionStatus = STATUS_CLOSED; return ERR_NET_SOCKET; } struct sockaddr_in addr; inet_aton(m_Host.c_str(), &addr.sin_addr); addr.sin_port = htons(m_Port); addr.sin_family = PF_INET; // Set timeout values for socket struct timeval timeouts; timeouts.tv_sec = SOCKET_TIMEOUT_SEC ; // const -> 5 […]

如何检测tcp客户端连接到服务器在c + +

我有一个TCP客户端/服务器,我想检测客户端的连接丢失; 因为我的客户端有多个接口,我一次连接到服务器与其中之一,我想知道如何检测客户端的连接丢失,以便我可以连接我的tcp客户端与另一个接口到服务器,如果他们全部我把我的数据存储在文本文件中。 我GOOGLE了,我已经看到保持活着,但不是我想要的。 如果这是重要的我的项目是在Linux和代码是在C + +。

Linux:如何将整个数据包发送到另一台主机上的特定端口?

我已经使用libpcap捕获了一个TCP数据包,并且我想把这个整个数据包(不用修改它)发送到另一个主机上的另一个端口上的另一个嗅探器。 有什么办法可以做到这一点? 非常感谢!