标签: networking

在套接字编程中使用非阻塞版本的 connect() 调用时使用的回调机制是什么?

在套接字编程中,假设服务器正在侦听特定端口上的 TCP 连接。现在,在客户端,我创建一个套接字并调用connect()与服务器建立连接。注意:connect() API 以非阻塞模式调用。

由于它是非阻塞调用,并且在调用connect() API 时没有传递回调方法以在事件完成时收到通知。所以,我想知道客户端如何知道 TCP 连接何时已成功建立。这样它就可以启动数据传输?

问题的第二部分 -何时。基本上,要建立 TCP 连接,应该发生 3 种方式的握手,如下所示 -

在此输入图像描述

我假设,当从客户端调用connect() API 时,客户端会发送SYNC数据包并启动连接建立过程。由于connect() API 是以非阻塞模式调用的,因此它只是通过请求内核来发起连接并返回函数调用。一旦成功建立连接,内核就必须通知客户端:可以开始传输数据了。我的困惑是,最后一个阶段是在服务器端完成3次握手(在服务器端到达ACK数据包之后),那么客户端的内核如何知道连接过程的完成?

或者内核一旦收到服务器进程的SYNC+ACK就会通知客户端进程连接建立

sockets networking tcp nonblocking

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

是否有内置功能来扩展 ipv6 地址?

我正在开展一个需要扩展 IPv6 地址的项目。Go中有内置函数吗?

我目前正在做的是

ipv6 := "fe80:01::af0"
addr := net.ParseIP(ipv6)
fmt.Println(addr.String())
Run Code Online (Sandbox Code Playgroud)

但这仍然打印

fe80:01::af0
Run Code Online (Sandbox Code Playgroud)

我真正需要的是

fe80:0001:0000:0000:0000:0000:0000:0af0
Run Code Online (Sandbox Code Playgroud)

networking ipv6 go

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

是否可以登录本地网络上运行的jupyter并使用其所有功能?

是否可以运行安装在本地网络的另一台计算机上的 Jupyter 实验室或笔记本?类似于 192.168.1.8:port_address

python networking localhost jupyter-lab

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

Flutter 中的 Streams 和 Sockets 有什么区别?

各位,Flutter 中的StreamsSockets有什么区别以及何时使用它们?

我将在移动应用程序(iOS/Android)中使用 Flutter,并且该应用程序将接收来自服务器的连续数据流,所以现在我很困惑为此目的选择什么。*请注意,性能很重要。

networking flutter

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

无法从桥接网络上的 Docker 容器内部访问 HTTP

我的开发环境是 Vagrant (VirtualBox) Linux 服务器,上面运行着 MySQL(端口 3306)和 Tomcat(端口 18080)。这是我运行 Docker 的主机服务器。

我需要在 docker 内运行另一个服务,连接到主机上的 MySQL 和 Tomcat 服务器以及任何外部 Web 服务器。

我发现MySQL到主机的连接是好的。但是,与 HTTP(端口 80 或 443)的连接将超时。如果我在 Mac 上(在 Vagrant 之外)运行相同的 Docker 镜像,我就可以连接到 MySQL 和任何外部 Web 服务器。

详细信息如下:

在我的主机上(Vagrant)

[root@my Downloads]# ip addr show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:95:b0:5e:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:95ff:feb0:5e47/64 scope link 
       valid_lft forever preferred_lft forever
[root@my Downloads]# 
Run Code Online (Sandbox Code Playgroud)

我进入 …

networking vagrant docker

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

从集群内部但在 Pod 外部按名称使用服务

我在默认命名空间中有一个 nginx pod,并且有一个公开该 pod 的 ClusterIP 服务。

\n
$ kubectl run nginx-pod --image=nginx\n$ kubectl expose po nginx-pod --name=nginx-service --port=8080 --target-port=80 --type=ClusterIP\n
Run Code Online (Sandbox Code Playgroud)\n

我可以从集群内部通过其内部 IP 访问该服务。

\n
$ kubectl get svc nginx-service\nNAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE\nnginx-service   ClusterIP   10.100.5.218   <none>        8080/TCP   2m49s\n$ wget -O- 10.100.5.218:8080\n
Run Code Online (Sandbox Code Playgroud)\n

--> 200 好

\n

我可以从 Pod 内部按名称访问该服务。

\n
$ kubectl run tmp -it --rm --image=busybox --command -- /bin/sh -c 'wget -O- nginx-service:8080'\n
Run Code Online (Sandbox Code Playgroud)\n

--> 200 好

\n

但是,为什么我无法从 Pod 外部按名称访问服务?

\n
$ wget -O- nginx-service:8080\n …
Run Code Online (Sandbox Code Playgroud)

networking kubernetes

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

无法专门化非泛型类型“结果”

我正在尝试进行简单的网络调用,但在使用结果类型时遇到错误。Xcode 告诉我“无法专门化非泛型类型‘结果’”。我正在寻找解决方案,但在互联网和 stackoverflow 中都没有成功找到它。错误是:

Cannot specialize non-generic type 'Result'
Remove '<FriendsModel,NetworkingError>'
Run Code Online (Sandbox Code Playgroud)

我的代码是:FriendsWebServices.swift

import Foundation

enum NetworkingError:Error{
    case nodataAvailable
    case invalidURL
    case canNotProcessData
    case encodingError
    case statusCodeIsNotOkay
}

class FriendsWebServices{
    static let shared = FriendsWebServices()
    private let session = URLSession.shared
    
    //Get Method
    func getPosts(completion: @escaping (Result<FriendsModel,NetworkingError>)->Void){
        let urlStirng = EndPointSouce.getEndPoint(type: .Base) + EndPointSouce.getEndPoint(type: .HowManyFriends(10))
        
        guard let url = URL(string: urlStirng) else {
            completion(.failure(.invalidURL))
            return
        }
        // Create the url request
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        
        let dataTask = …
Run Code Online (Sandbox Code Playgroud)

networking swift urlsession

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

如何将 Linux 程序的 UDP 套接字接收缓冲区大小增加到最大?

我正在尝试增加 UDP 套接字的接收缓冲区大小,但最终大小似乎不可预测:

    LOG_INFO("UDP echo server default receive buffer size : " << rcv_buf << " bytes");

    // increase default buffer sizes
    rcv_buf *= 3;

    LOG_INFO("trying to increase receive buffer size to : " << rcv_buf << " bytes");

    if (!SockWrap::set_recv_buf_size(m_handle, sizeof(m_sockaddr_in), rcv_buf))
        LOG_ERR("unable to set new receive buffer size");

    // checking the new size after possible modifications if any
    rcv_buf = SockWrap::recv_buf(m_handle, sizeof(m_sockaddr_in));

    if (rcv_buf == -1) {
        LOG_ERR("unable to read UDP echo server receive buffer size after modification"); …
Run Code Online (Sandbox Code Playgroud)

c++ sockets linux networking udp

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

无法访问 AKS 入口的公共 IP

我正在努力让我的 AKS 集群正常工作。我无法访问我的服务的公共IP(使用 nginx-ingress-controller )我尝试了azure负载均衡器入口,但这不起作用我在我的azure控制台中创建了一个静态公共IP并将其分配给我的nginx入口控制器 -该 IP 也不起作用我也尝试删除 kube-proxy pod,因为有些人抱怨这些在重新创建其入口后不会更新,因此他们必须通过删除它们来重新创建。这不是没有设置入口规则的问题,因为我收到连接超时(甚至无法访问 IP)而不是 404 错误

这是我的入口配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app
  annotations:
    appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - api.app
      secretName: tls
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app
                port:
                  number: 8080
Run Code Online (Sandbox Code Playgroud)

这是我的服务

$ kubectl get svc -A

default       kubernetes                           ClusterIP      10.0.0.1       <none>         443/TCP                         2d1h
default       app                                  LoadBalancer   10.0.85.118    20.81.3.210    8080:30578/TCP,6565:31233/TCP   171m
ingress       ingress-nginx-controller             LoadBalancer   10.0.21.143    20.121.107.7   80:31325/TCP,443:31584/TCP      18m
Run Code Online (Sandbox Code Playgroud)

我可以通过该服务的公共 IP 访问我的应用程序(负载均衡器配置) …

networking nginx azure azure-aks nginx-ingress

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

预期为“&amp;Arc&lt;ProxyPool&gt;”,找到“&amp;ProxyPool”

我尝试从&ProxyPoolto克隆引用&Arc<ProxyPool>,但仍然收到错误,引用的类型仍然是&ProxyPool

pub struct ProxyPool {
    connections: Mutex<Vec<TcpStream>>,
    proxy_addresses: Arc<Vec<SocketAddr>>,
}
pub struct PooledConnection {
    stream: TcpStream,
    pool: Arc<ProxyPool>,
}

impl ProxyPool {
    async fn get_connection(&self) -> Result<PooledConnection> {
        loop {
            if let Some(conn) = {
                let mut connections = self.connections.lock().unwrap();
                connections.pop()
            } {
                return Ok(PooledConnection {
                    stream: conn,
                    pool: Arc::clone(self), // converting &ProxyPool to Arc<ProxyPool>
                });
            }
            // If no connection is available, wait a bit and try again.
            tokio::time::sleep(Duration::from_millis(100)).await;
        }
    }

    fn return_connection(&self, …
Run Code Online (Sandbox Code Playgroud)

proxy networking reference rust

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