小编Wad*_*ade的帖子

如何让PHP生成Chunked响应

我搜索了这个问题,但没有答案.

我希望我的PHP脚本在chunked中生成HTTP响应(http://en.wikipedia.org/wiki/Chunked_transfer_encoding).怎么做?

更新:我明白了.我必须指定Transfer-encoding标头并刷新它.

header("Transfer-encoding: chunked");
flush(); 
Run Code Online (Sandbox Code Playgroud)

冲洗是必要的.否则,将生成Content-Length标头.

而且,我必须自己制作块.有了辅助功能,并不难.

function dump_chunk($chunk)
{
    echo sprintf("%x\r\n", strlen($chunk));
    echo $chunk;
    echo "\r\n";
}
Run Code Online (Sandbox Code Playgroud)

php http chunked-encoding

31
推荐指数
4
解决办法
3万
查看次数

程序退出后,使curses程序输出在终端回滚历史记录中保持不变

我对诅咒很陌生,所以我在python中尝试了一些不同的东西.

我初始化了窗口并为window对象设置了scrollok.我可以添加字符串,并且滚动工作,以便addstr()在窗口的末尾没有任何错误.

我想要的是能够在程序完成后在我的终端程序(tmux或KDE Konsole,在本例中)中滚动回程序输出.

在我的代码中,如果我跳过endwin()调用,我至少可以看到输出,但是终端需要重置调用才能恢复运行.

此外,即使在程序运行时,在curses窗口向下滚动之后,我也无法在Konsole中向后滚动以查看初始输出.

#!/usr/bin/env python2
import curses
import time
win = curses.initscr()
win.scrollok(True)
(h,w)=win.getmaxyx()
h = h + 10
while h > 0:
    win.addstr("[h=%d] This is a sample string.  After 1 second, it will be lost\n" % h)
    h = h - 1
    win.refresh()
    time.sleep(0.05)
time.sleep(1.0)
curses.endwin()
Run Code Online (Sandbox Code Playgroud)

python curses ncurses

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

使用辅助IP地址连接套接字

不久前,我能够通过以下步骤从给定接口上的主要或辅助IP地址连接到给定目标地址.

  1. 使用以下方法为给定接口添加辅助IP地址ip addr add ...,
  2. 根据需要将套接字绑定到主地址或辅助地址,
  3. 使用主要或辅助地址连接到目标IP地址,如#2中所示.

我最近将一台机器升级到Linux 3.3.6,这不再有效,但我不记得我试过的最后一个版本实际上是在工作.有谁知道如何在较新的内核中做同样的事情?我刚刚在另一台机器上验证了2.6.23上的相同代码.

更新2这似乎与NIC驱动程序有关.随着3.3.6和8139too,一切都很好.相同的机器,但使用不同的NIC和via-rhine,然后出现问题.

这是我在3.3.6(tshark在后台运行的数据包捕获输出)上运行代码(源端)时发生的情况:

$ ./bind_connect 10.0.1.124 10.0.1.120
Bound socket: 10.0.1.120 [10.0.1.120->10.0.1.124]

#           wrong source IP (should use 10.0.1.120 from bind)
#                      |
#                      v
$ 121.051052   10.0.1.220 -> 10.0.1.124   50418 80 TCP 74 50418 > 80 [SYN] Seq=3358582895 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=30589624 TSecr=0 WS=128
121.051428   10.0.1.124 -> 10.0.1.220   80 50418 TCP 74 80 > 50418 [SYN, ACK] Seq=1815118993 Ack=3358582896 Win=5792 Len=0 MSS=1460 …
Run Code Online (Sandbox Code Playgroud)

sockets ip routing tcp linux-kernel

6
推荐指数
1
解决办法
941
查看次数

为什么此代码会导致浮点异常 - SIGFPE

使用gcc 4.7:

$ gcc --version
gcc (GCC) 4.7.0 20120505 (prerelease)
Run Code Online (Sandbox Code Playgroud)

代码清单(test.c):

#include <stdint.h>

struct test {
    int before;

    char start[0];
    unsigned int v1;
    unsigned int v2;
    unsigned int v3;
    char end[0];

    int after;
};

int main(int argc, char **argv)
{
  int x, y;

  x = ((uintptr_t)(&((struct test*)0)->end)) - ((uintptr_t)(&((struct test*)0)->start));
  y = ((&((struct test*)0)->end)) - ((&((struct test*)0)->start));

  return x + y;
}
Run Code Online (Sandbox Code Playgroud)

编译和执行

$ gcc -Wall -o test test.c && ./test
Floating point exception
Run Code Online (Sandbox Code Playgroud)

SIGFPE由第二个赋值(y = ...)引起.在汇编列表中,这条线上有一个分区?请注意,x =和y =之间的唯一区别是转换为(uintptr_t).

c exception compiler-optimization gcc4

4
推荐指数
1
解决办法
4831
查看次数

使用Linux网络设备别名时,指定TCP套接字的源IP地址

对于某些特定的网络测试,我创建了一个VLAN设备eth1.900,以及一些别名eth1.900:1和eth1.900.2.

    eth1.900  Link encap:Ethernet  HWaddr 00:18:E7:17:2F:13
              inet addr:1.0.1.120  Bcast:1.0.1.255  Mask:255.255.255.0

    eth1.900:1 Link encap:Ethernet  HWaddr 00:18:E7:17:2F:13
              inet addr:1.0.1.200  Bcast:1.0.1.255  Mask:255.255.255.0

    eth1.900:2 Link encap:Ethernet  HWaddr 00:18:E7:17:2F:13
              inet addr:1.0.1.201  Bcast:1.0.1.255  Mask:255.255.255.0

连接到服务器时,有没有办法指定将使用哪些别名?我可以使用-I <ip>地址选项来选择使用哪个别名,但我不知道如何在不使用原始套接字的情况下使用代码中的TCP套接字来执行此操作,因为我还希望在没有额外套接字的情况下运行特权,即如果可能的话,不以root身份运行.

不幸的是,即使使用root,SO_BINDTODEVICE也不起作用,因为无法识别别名设备名称:

printf("Bind to %s\n", devname);
if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, (char*)devname, sizeof(devname)) != 0)
{
    perror("SO_BINDTODEVICE");
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

输出:

    Bind to eth1.900:1
    SO_BINDTODEVICE: No such device

sockets linux networking

2
推荐指数
1
解决办法
7000
查看次数

Python smtplib和每个连接多个消息

最近我正在研究用于python的smtplib smtp客户端库,但我找不到任何对支持它的smtp服务器的PIPELINING协议的引用.有什么我想念的吗?它还没有实现?启用PIPELINING的任何其他实现而不是smtplib?

谢谢

python smtp smtplib

2
推荐指数
1
解决办法
2349
查看次数