标签: networking

扭曲的`callInThread`正在阻塞

我有一个基于Twisted的程序,我在以下摘录中进行了简化:

    class PacketSender(object):

        def __init__(self, protocol_instance):
             self._stop = False
             self._protocol = protocol_instance

        def send(self, pkti):
            try:
                pkti1 = gen_packets.next()
                reactor.callInThread(self.write_packet, pkti)
            except StopIteration:
                self._stop = True

            do_some_stuff()

            if not self._stop:
                reactor.callLater(pkti.iat, self.send, pkti1)

        def write_packet(self, pkt):
            self.protocol.transport.write(pkt)
    ...
reactor.run()
Run Code Online (Sandbox Code Playgroud)

总结一下,该write_packet方法将调用transport.write我传递给构造函数类的某个协议实例的方法A.请注意,这是一个递归实现,其中方法send调用自身以获取通过协议发送的以下数据包.问题是,当它调用send延迟pkt.iat秒时,send的执行将在该callInThread调用时死亡,该调用应该生成一个新线程并继续执行do_some_stuff,对吧?所有这些代码实际上是在另一个扭曲的线程中运行,这意味着我们在某些时候从外部调用callInThread(packet_sender.send, pkt_0).

你有什么线索可能会发生什么吗?关于Twisted线程如何工作,我有什么遗漏吗?

python networking multithreading asynchronous twisted

0
推荐指数
1
解决办法
535
查看次数

可以分配给前缀为192.168.56.128/26的c类子网的最后一个IP地址是什么?

可以分配给前缀为192.168.56.128/26的c类子网的最后一个IP地址是什么?

你是如何得到这个答案的(以便我将来可以自己解决这个问题?)

谢谢!

ip networking ip-address

0
推荐指数
1
解决办法
285
查看次数

在传出UDP数据包上设置TTL?

如何使用C / C ++标准库在Windows,Mac和Linux的C / C ++中设置生存时间套接字选项?它需要没有Boost才能工作。C或C ++都可以。出站UDP数据包的IP标头修改。没有多播。

c++ sockets ip networking udp

0
推荐指数
1
解决办法
7348
查看次数

php.exe可以连续运行数周或数月的应用程序运行,而不会崩溃吗?

php.exe可以连续运行数周或数月的应用程序运行,而不会崩溃吗?

例如:UDP或HTTP/TCP服务器(或网络)应用程序.我听说它还没有为长时间运行的应用程序开发.我相信我们可以在linux和Windows中使用pthreads/events来进行多线程/并行,以支持为进程生成的负载并开发长时间运行的应用程序.但不确定会有多稳定.任何能够使用pthreads和长期运行的PHP应用程序发表评论并提供开发资源指导的人?

php networking events pthreads long-running-processes

0
推荐指数
1
解决办法
117
查看次数

OSI Layers解释道

我正在尝试了解网络层.有五个层,应用程序,传输,网络,链接和物理层.我从各种来源研究过,但我无法理解,特别是运输,网络和链接层.你能为像我这样的假人解释这些层吗?谢谢.

networking osi

0
推荐指数
1
解决办法
1302
查看次数

通过套接字发送的内容的数据类型是什么?

使用Berkeley套接字api时,通过read/send或write/recv调用发送的内容的数据类型是什么?例如 -

char *msg = "Our Message!";
int len, bytes_sent;
len = strlen(msg);
bytes_sent = send(sockfd, msg, len, 0);
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我们使用char类型,但是我们仅限于char类型,因为send/write/sendto通常采用void *类型.我也看到了一些参数,比如我们发送一些int,它实际上可能存储在little endian/big endian中,如果它们的endianess不匹配,会导致b/w source/dest出现问题.那么为什么不char输入这个问题呢?

另外C和C++等不同的语言也有不同的大小char,为什么这不是一个问题呢?如果socket不关心任何type内容并且只是将内容视为缓冲区,那么当不同的tcp服务器/客户端用不同的语言编写并相互通信时,为什么我们不会看到数据的随机损坏?

简而言之,我可以通过套接字安全地发送什么值(类型)?

c c++ sockets linux networking

0
推荐指数
1
解决办法
739
查看次数

ModemManager:mmcli获取信号强度

我无法在Sierre Wireless MC7304上检索信号强度。
通过mmcli发送AT命令似乎也不起作用。

:~ $ sudo mmcli -m /org/freedesktop/ModemManager1/Modem/0 --signal-get
 error: modem has no extended signal capabilities

:~ $ sudo mmcli -m /org/freedesktop/ModemManager1/Modem/0 --command=AT+CSQ
error: command failed: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unauthorized: Cannot send AT command to modem: operation only allowed in debug mode'


/org/freedesktop/ModemManager1/Modem/0 (device id 
'dd26a5483d051c6e25a7ca10f4d36a94791c7ebf')
-------------------------
Hardware |   manufacturer: 'Sierra Wireless, Incorporated'
       |          model: 'MC7304'
       |       revision: 'SWI9X15C_05.05.16.02 r21040 carmd-fwbuild1 
2014/03/17 23:49:48'
       |      supported: 'gsm-umts, lte'
       |        current: 'gsm-umts, lte'
       |   equipment id: 'unknown'
 -------------------------
  System   |         device: 
'/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5'
       | …
Run Code Online (Sandbox Code Playgroud)

linux networking modem wwan 4g

0
推荐指数
1
解决办法
5775
查看次数

如何将K8 Pod暴露给公共互联网?

我目前正在学习docker和kubernetes。我遇到的问题之一就是将Nginx Pod暴露在公共互联网上。我想从Web浏览器访问我的serverIP并看到nginx页面,就像在服务器上安装了nginx一样。

来自kubernetes网站的pod-nginx.yml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

我可以从pod向前移植,然后通过curl访问默认的nginx页面。 sudo kubectl port-forward nginx 80:80

curl http://localhost返回nginx页面,而curl http://<serverIP>返回failed to connect <serverIP> port:80 Connection refused

我是否需要通过修改iptables和防火墙规则在公共网络接口与群集网络接口之间进行端口转发?我觉得像即时通讯失去了一些东西真的很明显这里。

我尝试使用nodeport属性,并阅读了有关入口和负载平衡器的文档,但是我的云提供程序没有后端功能,因此这些命令最终会无限期地挂起。

networking docker kubernetes

0
推荐指数
1
解决办法
776
查看次数

如何通过Linux中的索引访问fd_set中的FD?

例如,我可以fd_set.fd_array[i]在Windows中访问它们..

request_list getIncomingRequests()
{
    fd_set master_set_copy = master_set;
    request_list requests;
    int socket_count = select(0, &master_set_copy, nullptr, nullptr, nullptr);
    for (int i = 0; i < socket_count; ++i)
    {
    #ifdef _WIN32
        auto req_fd = master_set_copy.fd_array[i];
    #else
        auto req_fd = master_set_copy...[i]; // ??
    #endif
        sockaddr_in req_addr;
        getsockname(req_fd, (sockaddr*)&req_addr, &addr_len);
        requests.push_back(request(req_fd, this->fd, req_addr));
    }
    return requests;
}
Run Code Online (Sandbox Code Playgroud)

但是fd_array在Linux中不存在,所以我需要一个等价物.

c c++ sockets linux networking

0
推荐指数
1
解决办法
287
查看次数

Java网络-连接两台计算机

我正在尝试编写一个简单的程序客户端服务器程序,该程序将客户端计算机连接到服务器计算机。

到目前为止,我的代码在localhost上运行良好,但是当我将客户端代码中的IP地址替换为服务器计算机的本地IP地址时,则未完成连接。我认为我的理解InetAddress不对。

套接字连接代码:Client.java

InetAddress ip = InetAddress.getByName("my_ip_address");
Socket s = new Socket(ip, 9876); //<- where the connection timeout happens
Run Code Online (Sandbox Code Playgroud)

java sockets networking ip-address inetaddress

0
推荐指数
1
解决办法
52
查看次数