草庐IT

recv-Buffer

全部标签

tcp - 评估/诊断时间连接在建立之前在 SYN_RECV

我正在尝试使用相当标准的CentOS/Apache设置来提高(虚拟)Web服务器的性能,我注意到的一件事是新连接似乎“停留”在SYN_RECV状态,有时会持续几秒钟,在最终由Apache建立和处理之前。我的第一个猜测是Apache可能会达到它准备同时处理的连接数的限制,但是例如关闭keep-alivenetstat报告一些已建立的连接(只是那些不涉及本地主机的连接,因此丢弃“管家”连接,例如Apache和Tomcat之间的连接),而启用keep-alive会很高兴地建立多达100多个已建立的连接(但是这两种方式都与SYN_RECV行为没有明显区别——在任何时候通常有10-20个连接位于

c - TCP : recv() getting ECONNRESET

我正在尝试使用TCP在Linux上实现一个简单的客户端/服务器程序和标准的socket.h库。服务器处理多个客户端,每个客户端都可以随时关闭()或关闭()套接字。在服务器端(使用非阻塞读取):intnBytes;if((nBytes=recv(socket,buffer,BUFFER_SIZE,MSG_DONTWAIT))==-1){if(errno!=EAGAIN&&errno!=EWOULDBLOCK){//printtolog}}if(nBytes==0){//othersideclosedtheconnection}我正在让recv()返回-1并将错误设置为ECONNRESET

java - 谷歌 Protocol Buffer (Java 到 C++)

我正在尝试在Java和C++之间设置TCP/IP套接字连接,在Windows上使用Java,在RaspberryPi上使用C++。正在传输的消息是GoogleProtocolBuffer消息,其原型(prototype)设置如下:packagepackage_name;messageWin2Pi{optionalint32num1=1;optionalint32num2=2;optionalint32num3=3;optionalint32num4=4;optionalboollogic1=5;optionalboollogic2=6;optionalboollogic3=7;opti

sockets - 为什么 skb_buffer 需要跳过 20 个字节才能在数据包输入时读取传输缓冲区?

我正在Linux中编写一个网络模块,我看到只有从skb缓冲区跳过20个字节后才能提取tcpheader,即使API是“skb_transport_header”。其背后的原因是什么?有人可以详细解释一下吗?传出数据包不需要同样的。我知道在接收数据包时,当数据包从L1流向L5时,header会被删除。但是,当数据包传出时,会添加header。这在这里有何不同?/**对于输入包**/structtcphdr*tcp;tcp=(structtcphdr*)(skb_transport_header(skb)+20);/**对于传出数据包**/structtcphdr*tcp;tcp=(str

c++ - 使用Winsock的send()/recv()时,确认响应是否必要?

使用C++的Winsock,我使用send()/recv()TCP连接来发送和接收数据。我想确定数据已经传递给另一方,并且想知道是否建议在(如果)使用recv接收数据后发送一些确认消息。这有两种可能性,请提出建议:如果发送返回传递的缓冲区的大小,则假定数据至少已传递到线路另一侧的recv函数。当我说“至少”时,我的意思是即使recv在那里失败(例如,由于缓冲区不足等),我也不在乎,我只是想确保自己已完成服务器的部分工作正确-我已经完全发送了数据(即数据已到达另一台计算机)。使用其他确认:在使用recv接收到数据之后,发回一些已接收数据包的ID(已发送的每个数据的header的一部分),

windows - 当请求的缓冲区大小大于可用数据量时,为什么 recv 会失败?

TCP传输栈的底层是许多缓冲区限制,有时它们的作者记录了这些限制。在WinXPSP3上,我遇到了其中之一,我想,但无法弄清楚原因。我已经实现了一个简单的客户端来从服务器获取数据(由一位同事用Java编写)。该协议(protocol)是将数据的长度(按网络顺序)写入四个字节,然后写入数据。服务器以1024字节block的形式将数据写入TCP流。客户端正确接收数据缓冲区的长度,分配内存并在循环中重复调用recv以获取所有数据:unsignedintTCP_BlockSize=4096;unsignedintlen;intresult;...codetorequestlen...unsign

c++ - TCP 套接字 : Where does incoming data go after ack(leaves tcp read buffer) but before read()/recv()?

如果我有一个以200KB/秒的速度传输数据的TCP连接,但我每秒只从套接字read()/recv()一次,那么在哪里那些200KB的数据同时存储?据我所知,数据在ack发送给发送方后离开TCP套接字的读取缓冲区,而且它太小了,无法容纳200KB的数据,同时它在哪里等待,直到它可以被我的客户读取()/recv()?谢谢!!以下答案声称数据在被read()/recv()d之前一收到ACK就离开TCP读取缓冲区:https://stackoverflow.com/a/12934115/2378033“接收器的套接字接收缓冲区的大小决定了在没有确认的情况下可以传输多少数据”会不会是我的假设是错

c - 为 connect() 函数设置超时 C 中的 tcp 套接字编程中断 recv()

在我的程序中,如果服务器不可访问,连接功能会花费太多时间。所以我尝试使用select()给连接超时。现在的问题是,当我尝试使用recvfrom()从服务器接收数据时,出现错误“EAGAIN”。这是用于连接服务器并从服务器接收数据的代码。intsock;structsockaddr_inaddr;intconnectWithServer{intstatus;structtimevaltimeout;timeout.tv_sec=10;timeout.tv_usec=0;addr.sin_port=htons(port);sock=socket(AF_INET,SOCK_STREAM,0)

swift - 如何在AR场景运行时提取SceneKit Depth Buffer?

如何提取SceneKit深度缓冲区?我制作了一个运行Metal的基于AR的应用程序,我真的很难找到有关如何提取2D深度缓冲区的任何信息,以便我可以渲染出场景的精美3D照片。非常感谢任何帮助。 最佳答案 你的问题不清楚,但我会尽力回答。VRView的深度传递如果您需要从SceneKit的3D环境渲染深度channel,那么您应该使用,例如,SCNGeometrySource.Semantic结构体。有vertex,normal,texcoord,color和tangent类型属性。让我们看看什么是vertex类型属性是:staticl

ios - swift 错误 : fatal error: Cannot index empty buffer

我是Swift语言的新手。我创建了一个MapKit应用程序,它从Sqlite数据库(最新的FMDB堆栈)中递归地检索MKPointAnnotation数据(纬度、日志和标题)。目的是把一堆兴趣点放在一个MKMapViewDelegate上。我尝试过不使用数组,但mapView.addAnnotation会覆盖任何点并仅显示map上的最后一个点,因此我正在尝试使用数组。我已经创建了一个函数,但是当调用wpoint数组时,我在运行时收到错误“fatalerror:无法索引空缓冲区”。代码如下:funcinitializeRoute(){sharedInstance.database!.op