小编Jon*_*ark的帖子

当服务器套接字接受客户端套接字时,究竟发生了什么?

我正在研究套接字编程,而服务器套接字accept()让我感到困惑.我为服务器套接字编写了两个方案accept(),请看一下:

  1. 当服务器套接字执行时accept(),它会创建一个新的(客户端)套接字,该套接字绑定到与端口服务器套接字绑定不同的端口.因此套接字通信是通过新绑定端口完成的,服务器套接字(accept()仅用于)正在等待最初绑定端口上的另一个客户端连接.

我认为这不是很正确的答案,因为(1)端口匹配单个进程和(2)套接字接受是内部进程问题,单个进程可以有多个套接字.所以我根据一些stackoverflow答案做了第二个场景:

  1. 当服务器套接字做accept(),它创建了一个新的(客户端)套接字没有绑定到任何特定的端口,并在客户端与服务器进行通信,它使用的端口被绑定到服务器套接字(谁accept()小号连接)和其客户端套接字来实际的通信是由(sourceIP, sourcePort, destIP, destPort)传输级别的TCP头(?)中的元组解决的(这也是可疑的,因为我认为socket是某种应用程序级对象)

这种情况也提出了一些问题.如果套接字通信仍然使用服务器套接字的端口,即客户端向服务器套接字端口发送一些消息,它是否使用服务器套接字的积压队列?我的意思是,客户端的消息如何区分connect()read() or write()?如何解决服务器中的每个客户端套接字,没有任何端口绑定?

如果我的一个场景是正确的,会回答以下问题吗?或者我可能做了两个错误的场景,所以非常感谢你提供正确的答案,或至少一些相关的文本来研究.

sockets tcp

8
推荐指数
2
解决办法
5294
查看次数

摆脱IntelliJ(或其他IDE)括号的快捷方式

假设|是一个游标指针。我想要做的是一旦输入完参数,就摆脱括号。分步说明:

// 1: type function name
void function|

// 2: openening paren automatically generate closing paren for convenience
void function(|)

// 3: type paremeters...
void function(42|)

// 4: ...and get out of parenthesis!
void function(42)|
Run Code Online (Sandbox Code Playgroud)

通常,我使用向右箭头来执行此操作,但是使用箭头并不那么方便,并且我想知道这样做是否有任何捷径。我很好奇的是IntelliJ,但如果您能告诉我任何其他Jetbrain IDE或Visual Studio等的快捷方式,那将非常好。

shortcut intellij-idea

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

与天真计算相比,FMA表现

我试图在浮点计算中比较FMA性能(fma()in math.h)与朴素乘法和加法.测试很简单.我将为大迭代次数迭代相同的计算.我需要做两件事才能进行精确检查.

  1. 在计算时间时不应包括其他计算.
  2. 天真的乘法和加法不应该优化为FMA
  3. 迭代不应该优化.即迭代应该完全按照我的预期进行.

为了实现上述目标,我做了以下事情:

  1. 函数是内联的,仅包含所需的计算.
  2. 使用g ++ -O0选项不优化乘法.(但是当我查看转储文件时,它似乎为两者生成几乎相同的代码)
  3. 用过volatile.

但结果显示,fma()与天真的乘法和加法相比几乎没有差异,甚至更慢.它是我想要的结果(即它们在速度方面没有真正的不同)或者我做错了什么?

规格

  • Ubuntu 14.04.2
  • G ++ 4.8.2
  • Intel(R)Core(TM)i7-4770(3.4GHz,8MB L3缓存)

我的守则

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <chrono>
using namespace std;
using namespace chrono;

inline double rand_gen() {
    return static_cast<double>(rand()) / RAND_MAX;
}

volatile double a, b, c;
inline void pure_fma_func() {
    fma(a, b, c);
}
inline void non_fma_func() {
    a * b + c;
}


int main() {
    int …
Run Code Online (Sandbox Code Playgroud)

c++ fma

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

标签 统计

c++ ×1

fma ×1

intellij-idea ×1

shortcut ×1

sockets ×1

tcp ×1