recv

git clone GnuTLS recv error (-9): A TLS packet with unexpected length was received

匿名 (未验证) 提交于 2019-12-03 01:34:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I tried to clone my project on my linux server via git and suddenly got this error: GnuTLS recv error (-9): A TLS packet with unexpected length was received. This is asked many times, but answered none. I am using bitbucket. 回答1: It turns out you just need to remove git with sudo apt-get purge git but NOT with sudo apt-get --purge git for some reason it wont work if you do --purge . Now install it again by typing sudo apt-get install git . And then when you try your clone, it should work properly. 文章来源: git clone GnuTLS recv error (-9): A

Erlang get_tcp:recv data length

匿名 (未验证) 提交于 2019-12-03 00:56:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I user gen_tcp:recv(Socket, 0). for data receiveng, but i can receive only 1418 bytes for 1 time. How can I receive how much data was sent? 回答1: in gen_tcp:recv(Socket, 0) you are asking the kernel: "Give me all data there is available right now in the receive buffer". The kernel is also free to give you less however. Even for a rather fast link, you will probably hit slow start on the TCP connection so in the beginning you will not get much data. The solution is to do your own buffering. You will have to eat data from the underlying socket

PHP CURL Error - curl: (56) Recv failure: Connection reset by peer

匿名 (未验证) 提交于 2019-12-03 00:52:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: basically, this error only occurs in CURL curl: (56) Recv failure: Connection reset by peer But when I visit it directly the link directly on my browser, it works! What are your recommendations on fixing this one or the cause of this error? Note: the server is coded in ASP and it only occurs on one API Call 回答1: I remember facing this issue a long time back. While I don't remember what exactly sorted the issue, but I remember trying the following: 1) I was trying to pass the query parameters in the url directly and I tried passing through

curl (56) Recv failure

匿名 (未验证) 提交于 2019-12-03 00:52:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: While running the command: curl --head http://www.yourdomain.com/ on my local machine, I get this output: HTTP/1.1 200 OK Date: Sat, 31 Mar 2012 09:45:16 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Set-Cookie: ASP.NET_SessionId=p2mt4l553bti4x55geyiwiil; path=/; HttpOnly Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 14663 but on my live server, I just get: curl: (56) Recv failure: Connection reset by peer They are both using the same curl version (7.21.0) and for now, I am

18匿名管道

匿名 (未验证) 提交于 2019-12-03 00:32:02
管道概念 进程间通信工具, 把数据从一端输出到另一端 半双工通信 无名管道(直接称之为管道), 只能用于父子进程或者兄弟进程间通信。 命名管道 , 可以用于所有进程间通信 管道创建 <unistd.h> int pipe( int fds[2] ) 成功返回 0 , 失败返回 -1 fds[0] 用于读取, fds[1] 用于写入 思路: 管道(单向)创建流程 (父进程发送信息到子进程) 1: 创建管道 pipe() 获取管道 fds[0] (读取), fds[1] (写入) 2: 创建子进程 fork() 子进程继承 fds[0], fds[1] 3: 父进程关闭读取功能 close(fds[0]) 4: 子进程关闭写入功能 close(fds[1]) 5:父进程写信息到 fds[1] 6:子进程读信息从 fds[0] 单向管道 例子: 父进程发送消息到子进程 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <ctype.h> void testSinglePipe() { int fds[2]; pid_t pid; char buf[128]={0}; //-1 crete pipe fail if(pipe(fds)) { perror("fail

4-3 非阻塞IO

匿名 (未验证) 提交于 2019-12-03 00:14:01
Linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道数据还没有准备好,于是用户就可以在本次到下次再发起read询问的时间间隔内做其他事情,或者直接再次发送read操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存(这一阶段仍然是阻塞的),然后返回。 也就是说非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好, 此时会返回一个error。进程在返回之后,可以干点别的事情,然后再发起recvform系统调用。重复上面的过程, 循环往复的进行recvform系统调用。这个过程通常被称之为轮询。轮询检查内核数据,直到数据准备好,再拷贝数据到进程, 进行数据处理。需要注意,拷贝数据整个过程,进程仍然是属于阻塞的状态。 所以,在非阻塞式IO中,用户进程其实是需要不断的主动询问kernel数据准备好了没有。

粘包问题、解决粘包问题和struct模块

匿名 (未验证) 提交于 2019-12-03 00:03:02
Ŀ¼ 粘包:tcp会把数据量较小、时间间隔较短的数据,当做同一个包发送。 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 只有TCP有粘包问题,UDP永远不会粘包 udp是基于数据报的,udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendinto(y),收完了x个字节的数据就算完成,若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠 TCP是基于数据流的,tcp的协议数据不会丢,没有收完包,下次接收,会继续上次继续接收,己端总是在收到ack时才会清除缓冲区内容。数据是可靠的,但是会粘包。 发送端需要等缓冲区满才发送出去,造成粘包(发送时间间隔很短,数据又很小,会合到一起发送,产生粘包) 接收端不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包) # 服务端 import socket soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 绑定地址和端口号 soc.bind(('127.0.0.1',8005)) # 监听 soc.listen(5) # 连接循环 while True: print('等待客户端连接>>>') conn

单一职责原则(SRP)

匿名 (未验证) 提交于 2019-12-02 23:57:01
内聚性: 一个模块的组成元素之间的功能相关性。 就一个类而言,应该仅有一个引起它变化的原因。 当需求变化时,该变化会反映为类的职责的变化,如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个。 如果一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。 这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 什么是职责? 在SRP中,吧职责定义为“变化的原因”。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个职责。有时,很难注意到这一点,我们习惯于以组的形式去考虑职责。 Modem接口,大多数人认为这个接口非常合理: public interface Modem { public void dial ( String pno ); public void hangup (); public void send ( char c ); public void recv (); } 然而,该接口却显示两个职责(1)连接管理(2)数据通信。 dial和hangup连接处理,send和recv数据通信 这两个职责应该被分开吗?这依赖于应用程序变化的方式。如果应用程序的变化会影响连接函数的签名,那么这个设计就具有僵化性的臭味,因为send和recv的类必须要重新编译。 在这种情况下

多线程的UDP聊天器

匿名 (未验证) 提交于 2019-12-02 23:57:01
# pcjimport socketimport threading# def recv_msg(udp_socket):# while True:# recv_date = udp_socket.recvfrom(1024)# print(recv_date[0].decode("gbk"),recv_date[1])## def send_msg(udp_socket,dest_ip,dest_port):# while True:# send_date = input("请输入要发送的信息")# udp_socket.sendto(send_date.encode("gbk"),(dest_ip,dest_port))### def main():# # 创建UPD套接字# udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# # 邦定本地信息# udp_socket.bind(("",9999))# dest_ip = input("请输入对方IP")# dest_port = int(input("请输入PORT"))# #接收信息# t_recv=threading.Thread(target=recv_msg,args=(udp_socket,))# t_send =threading.Thread

TCP协议的粘包问题(八)

匿名 (未验证) 提交于 2019-12-02 23:56:01
在socket缓冲区和数据的传递过程介绍中,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。 例如,write()/send() 重复执行三次,每次都发送字符串"abc",那么目标机器上的 read()/recv() 可能分三次接收,每次都接收"abc";也可能分两次接收,第一次接收"abcab",第二次接收"cabc";也可能一次就接收到字符串"abcabcabc"。 假设我们希望客户端每次发送一位学生的学号,让服务器端返回该学生的姓名、住址、成绩等信息,这时候可能就会出现问题,服务器端不能区分学生的学号。例如第一次发送 1,第二次发送 3,服务器可能当成 13 来处理,返回的信息显然是错误的。 这就是数据的“粘包”问题,客户端发送的多个数据包被当做一个数据包接收。也称数据的无边界性,read()/recv() 函数不知道数据包的开始或结束标志(实际上也没有任何开始或结束标志),只把它们当做连续的数据流来处理。 来源:博客园 作者: codedot 链接:https://www.cnblogs.com/myitnews/p/11433532.html