논 블로킹 소켓 연결을 사용하고 싶지만 기본 개념을 이해하기위한 예제를 찾을 수 없습니다. 서버에 연결할 때 프로그램 실행을 차단하지 않을 클라이언트가 필요합니다.Perl 논 블로킹 소켓
use IO::Socket;
use IO::Select;
use strict;
$|=1;
my $host="10.0.0.12";
my $SELECT = new IO::Select;
print "Connecting...";
my $sock=new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 3128,
Proto => 'tcp',
Blocking => 0);
if(!$sock)
{
print "Could not create socket: $!n";
}
#print "ok\n";
$SELECT->add($sock);
my $buf;
while (1){
if($sock and $sock->connected())
{
print "ok\n";
}
while (my @ready=$SELECT->can_read(0.5))
{
foreach my $child (@ready)
{
if(!sysread($child, $buf, 256))
{
$SELECT->remove($child);
next;
}
}
}
sleep 1;
}
소켓 $ sock- 연결> 연결()가 true를 반환하고 내가 뭔가를 할 수 있습니다 지금 나는 다음과 같은 코드가 있습니다. 하지만 소켓에서 시간 초과를 확인하는 방법은 무엇입니까? 연결할 수없고 시간 초과로 닫힌 경우 확인할 수 없습니다! 내가 어떻게 해?
올린 사람 : 아, 봐! 제한 시간이 만료 될 때 코드의 조각
if(!sysread($child, $buf, 256))
{
$SELECT->remove($child);
next;
}
소켓을 닫습니다!
http://www.lowtek.com/sockets/select.html에서 기본적으로 설명합니다. Perl이 아니라 C를위한 것이 든 상관 없습니다. 원칙은 동일합니다. – tripleee
그 예는 서버 측을 보여 주며 시간 제한에 대해서는 신경 쓰지 않습니다. 만료 된 후 소켓이 닫힙니다. 클라이언트 측이 필요하고 닫을 때를 알아야합니다. – Shura