小编Kri*_*ost的帖子

使用iptables更改目标端口

是否可以使用iptables更改UDP数据包的目标端口?

我试图让一个SNMP代理在1620而不是162发送陷阱.不幸的是到目前为止我只是设法改变了源端口:

iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --to:1620

linux iptables

19
推荐指数
3
解决办法
6万
查看次数

与epoll异步连接和断开连接(Linux)

我需要使用epoll for Linux为tcp客户端进行异步连接和断开连接.有分机.Windows中的函数,如ConnectEx,DisconnectEx,AcceptEx等...在tcp服务器标准接受函数正在工作,但在tcp客户端无法正常工作连接和断开...所有套接字都是非阻塞的.

我怎样才能做到这一点?

谢谢!

sockets linux asynchronous epoll tcp

8
推荐指数
1
解决办法
3万
查看次数

Linux:写入分为 512K 块

我有一个生成大 SCSI 写入的用户空间应用程序(详细信息如下)。然而,当我查看到达 SCSI 目标(即存储,由 FC 连接)的 SCSI 命令时,某些东西将这些写入拆分为 512K 块。

该应用程序基本上会直接向设备进行 1M 大小的直接写入:

fd = open("/dev/sdab", ..|O_DIRECT);
write(fd, ..., 1024 * 1024);
Run Code Online (Sandbox Code Playgroud)

此代码导致发送两个 SCSI WRITE,每个 512K。

但是,如果我发出直接 SCSI 命令,而没有块层,则不会拆分写入。我从命令行发出以下命令:

sg_dd bs=1M count=1 blk_sgio=1 if=/dev/urandom of=/dev/sdab oflag=direct
Run Code Online (Sandbox Code Playgroud)

我可以看到一个 1M 大小的 SCSI WRITE。

问题是,什么是拆分写入,更重要的是,它是否可配置?Linux 块层似乎是有罪的(因为 SG_IO 不通过它)并且 512K 似乎太随意了,不能成为某种可配置的参数。

linux kernel scsi block linux-kernel

5
推荐指数
1
解决办法
2202
查看次数

编写持久的perl脚本

我正在尝试编写持久/缓存脚本.代码看起来像这样:

...
Memoize('process_fille');
print process_file($ARGV[0]);
...
sub process_file{
    my $filename = shift;
    my ($a, $b, $c) = extract_values_from_file($filename);
    if (exists $my_hash{$a}{$b}{$c}){
        return $my_hash{$a}{$b}{$c};
    }
    return $default;
}
Run Code Online (Sandbox Code Playgroud)

这将从循环中的shell脚本调用,如下所示

value=`perl my_script.pl`;
Run Code Online (Sandbox Code Playgroud)

有没有办法可以调用这个脚本,以保持其状态.从打电话到打电话.让我们假设初始化'%my_hash'和调用extract_values_from_file都是一项昂贵的操作.

谢谢

unix linux bash perl

4
推荐指数
2
解决办法
1111
查看次数

标签 统计

linux ×4

asynchronous ×1

bash ×1

block ×1

epoll ×1

iptables ×1

kernel ×1

linux-kernel ×1

perl ×1

scsi ×1

sockets ×1

tcp ×1

unix ×1