惊群效应测试脚本

thundering-herd.pl



#! /usr/bin/perl ## ## to test: ## 1) run this script with either "accept" or "select-accept" as the argument ## (the script listens to 127.0.0.1:12345) ## 2) telnet localhost 12345 ## 3) if you see "accept failed", there is the thundering herd problem ## use strict; use warnings; use IO::Socket::INET; my $mode = $ARGV[0] || ''; if ($mode !~ /^(accept|select-accept)$/) { die "Usage: $0 <accept|select-accept>\n"; } my $listener = IO::Socket::INET->new( Listen => 5, LocalPort => 12345, LocalAddr => '127.0.0.1', Proto => 'tcp', ReuseAddr => 1, ) or die "failed to listen to port 127.0.0.1:12345:$!"; if ($mode eq 'select-accept') { $listener->blocking(0) or die "failed to set listening socket to non-blocking mode:$!"; } my $pid = fork; die "fork failed:$!" unless defined $pid; while (1) { if ($mode eq 'select-accept') { while (1) { my $rfds = ''; vec($rfds, fileno($listener), 1) = 1; if (select($rfds, undef, undef, undef) >= 1) { last; } } } my $conn = $listener->accept; if ($conn) { warn "connected!"; $conn->close; } else { warn "accept failed:$!"; } }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容