阻塞的Socket鏈結

2021-04-19 20:58:38 字數 1347 閱讀 6236

#!/usr/bin/perl -w

# socket_cli.plx

# usage

# socket_cli.plx 同乙個檔案重複執行次數 傳送socket包存放的檔案 [從檔案第幾行開始執行]

use strict;

use io::socket;

use benchmark;

my $addr = '127.0.0.1';

my $port = '40169';

my $for_num = $argv[0] || die "請輸入需要迴圈的次數!/n";

my $f_name = $argv[1] || die "請資料讀入的檔案!/n";

my $next_line = $argv[2] || '0'; #從檔案第幾行開始執行

my($rbuf,$succ_bytes,$recv_bytes,$systime,$time_out,$socket);

my($timesamp1,$timesamp2,$time_run,$file_line,$log_file);

#日誌檔案

#$log_file="./socket_long_".$f_name."log";

$log_file="/dev/null";

open (filelog,">>$log_file") || "open file err! $!";

$time_out = 5;

$sig = sub ;

for (my $i=1;$i<=$for_num;$i++)

chomp $_;

$systime = `date '+%y%m%d %h:%m:%s'`;

chomp $systime;

print filelog "********************===$systime****************************************=/n";

print filelog "執行第 $i 次迴圈(共需執行迴圈 $for_num 次)/n";

print filelog "傳送資料報:/n$_"."/n";

#print filelog $socket "$_";

eval;

$file_line++;

print filelog "已經處理 $f_name 的 $file_line 行記錄/n"

}close $socket;

close filename;

$systime = `date '+%y%m%d %h:%m:%s'`;

print filelog "已經處理檔案$i次迴圈完畢:".$systime."/n"

}close filelog;

轉阻塞socket和非阻塞socket

讀操作 對於阻塞的socket,當socket的接收緩衝區中沒有資料時,read呼叫會一直阻塞住,直到有資料到來才返 回。當socket緩衝區中的資料量小於期望讀取的資料量時,返回實際讀取的位元組數。當sockt的接收緩衝 區中的資料大於期望讀取的位元組數時,讀取期望讀取的位元組數,返回實際讀取的長...

阻塞 非阻塞socket的理解

b 阻塞socket是這樣的 b recv socket1,buf,length 去網絡卡緩衝區讀取socket1的資料,讀到的資料儲存到buf 如果網絡卡緩衝區有1個位元組,就返回1個,有兩個就返回兩個,當然不能超過length 如果網絡卡緩衝區沒有資料,那麼就一直等待,直到有資料可讀 是的,很傻...

socket阻塞與非阻塞

何為阻塞?在以上過程中若連線還沒到來,那麼接受阻塞,程式執行到這裡不得不掛起,cpu轉而執行其他執行緒。在以上過程中若資料還沒準備好,請閱讀會一樣也會阻塞。阻塞式網路io的特點 多執行緒處理多個連線。每個執行緒擁有自己的棧空間並且占用一些cpu時間。每個執行緒遇到外部為準備好的時候,都會阻塞掉。阻塞...