recv

用setsockopt()来控制recv()与send()的超时 linux

徘徊边缘 提交于 2019-12-10 16:22:50
在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制: 在Linux下需要注意的是时间的控制结构是struct timeval而并不是某一整型数,以下是来自于网上一篇文章中的摘录,它是这样写的: int nNetTimeout=1000;//1秒, //设置发送超时 setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //设置接收超时 setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); 这样做在Linux环境下是不会产生效果的 , 须如下定义 :struct timeval timeout = {3,0}; //设置发送超时 setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval)); //设置接收超时 setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval)); 有两点注意就是 : 1)recv ()的第四个参数需为MSG_WAITALL

curl (56) Recv failure

余生长醉 提交于 2019-12-10 14:55:16
问题 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

socket->recv() vs. <>?

孤人 提交于 2019-12-10 13:18:43
问题 I'm trying to work through a small Perl learning project that requires reading 4 unsigned integers from a socket. I couldn't get more than 1 integer read, and after digging around I found a solution. But I NEED to understand what I didn't do right (and have gone through a couple of Perl books, perldocs, etc to no avail.) Example 1: Here's the successful solution code (original), assume the socket connect is successful for both below: { local $/ = \16; # make <> read in 16 bytes with one swoop

网络

▼魔方 西西 提交于 2019-12-10 12:10:57
私有ip 私有ip就是局域网中使用的ip地址,国际规定有一部分ip地址是在局域网中使用的 私有ip的范围,也就是不在公网中使用的ip地址范围: 10.0.0.0~10.255.255.255 172.16.0.0~172.31.255.255 192.168.0.0~192.168.255.255 4. 本机ip地址 127.0.0.1表示本机ip地址; 本机域名是localhost; 通过域名可以解析一个ip地址,域名方便大家记忆某台电脑的主机地址 Linux命令(ping, ifconfig) 查看或配置网卡信息:ifconfig ifconfig查看网卡的信息: 测试远程主机连通性:ping 通常用ping来检测网络是否正常 2. 端口号 端口号:使用唯一一个编号来标识端口, 其实就是标识端口的一个编号。 在linux系统中,端口号有65536(2的16次方)个 端口号划分 端口号不是随意使用的,而是按照一定的规定进行分配。 端口号分为知名端口号和动态端口号 3.1 知名端口号(Well Known Ports) 知名端口号: 系统程序使用的端口号 知名端口号是众所周知的端口号,范围从0到1023 80端口分配给HTTP服务 21端口分配给FTP服务 一般情况下,如果一个程序需要使用知名端口的需要有root权限 3.2 动态端口号(Dynamic Ports) 动态端口号:

How to use single port for multiple logical data streams (Winsock)?

我怕爱的太早我们不能终老 提交于 2019-12-10 10:52:39
问题 I'm developing the client-server Winsock app (Visual C++) that should transmit the various kind of data (video stream, audio stream, service notifications, etc.) over the network. I know that the cleaner approach would be to use separate ports on separate threads for each individual data type (I call it "stream" here). But that would require occupying at least 5 different ports that would get problematic for some network infrastructures (firewall port forwarding, etc.). So I'm trying to

epoll的本质是什么

混江龙づ霸主 提交于 2019-12-10 09:25:56
从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。 epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的原因是什么? 网上虽然也有不少讲解 epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔者于是决定编写此文,让缺乏专业背景知识的读者也能够明白 epoll 的原理。 文章核心思想是:要让读者清晰明白 epoll 为什么性能好。 本文会从网卡接收数据的流程讲起,串联起 CPU 中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、select 到 epoll 的进化过程;最后探究 epoll 的实现细节。 一、从网卡接收数据说起 下边是一个典型的计算机结构图,计算机由 CPU、存储器(内存)与网络接口等部件组成,了解 epoll 本质的第一步,要从硬件的角度看计算机怎样接收网络数据。 计算机结构图(图片来源:Linux内核完全注释之微型计算机组成结构) 下图展示了网卡接收数据的过程。 在 ① 阶段,网卡收到网线传来的数据; 经过 ② 阶段的硬件电路的传输; 最终 ③ 阶段将数据写入到内存中的某个地址上。 这个过程涉及到 DMA 传输、IO 通路选择等硬件有关的知识,但我们只需知道:

recv() data of unknown size with Berkeley Sockets

和自甴很熟 提交于 2019-12-09 23:29:41
问题 I have a code in C++ in which i use recv() from Berkeley Sockets to receive data from a remote host. The issue is that i do not know the size of the data ( which is variable ) so i need some kind of timeout opt ( probably ) to make this work. Since I'm new in sockets programming, i was wondering how does for example a web client handle responses from a server ( eg a server sends the html data to the client ). Does it use some kind of timeout, since it doesn't know how big the page is ? Same

How to catch a “connection reset by peer” error in C socket?

倖福魔咒の 提交于 2019-12-09 23:14:13
问题 I have a C++ and Qt application which part of it implements a C socket client. Some time ago by app crashed because something happened with the server; the only thing I got from that crash was a message in Qt Creator's Application Output stating recv_from_client: Connection reset by peer I did some research on the web about this "connection reset by peer" error and while some threads here in SO and other places did managed to explain what is going on, none of them tells how to handle it -

STM32移植lwip之建立tcp客户端

橙三吉。 提交于 2019-12-09 22:38:12
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/q361750389/article/details/53044119 本篇目标:在之前能ping通pc机的工程基础上搭建tcp客户端,并可以主动发数据给pc机,同时也能与pc机收发数据,并在网络调试工具上显示 材料准备: 基础工程:修改后能ping通pc机的工程(STM32官方移植lwip修改代码) 调试工具:用来调试tcp连接下的数据接收(网络调试助手) 搭建工程:最终搭建好tcp客户端数据接收的工程(tcp客户端建立工程) 搭建TCP客户端 搭建TCP客户端的过程与上一章TCP服务器也相似,所以尽量把重点的地方加粗显示来区别 在搭建TCP客户端之前可以先理一下概念,客户端与服务器的区别: 客户端:主动建立tcp去连接目标IP 服务器:拥有静态IP,能让其他设备被动连接 因此用STM32搭建的TCP客户端主动去连接PC机创建的虚拟服务器,并完成收发数据的动作,接下来创建新的c文件,为tcp_client.c,编写三个函数: tcp服务器初始化函数 Tcp_Client_Init() : void Tcp_Client_Init(void) { struct tcp_pcb *tcp_client_pcb; struct

树莓派点亮小灯泡

浪子不回头ぞ 提交于 2019-12-09 21:05:42
import serial import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(23, GPIO.OUT) GPIO.setup(24, GPIO.OUT) GPIO.setup(25, GPIO.OUT) GPIO.output(23, GPIO.LOW) GPIO.output(24, GPIO.LOW) GPIO.output(25, GPIO.LOW) ser = serial.Serial("/dev/ttyUSB0",9600) ser.flushInput() # ser.write("play,001,$") def main(): while True: count = ser.inWaiting() if count !=0: print(count) recv = int.from_bytes(ser.read(count), byteorder='big', signed=False) print(recv) print(type(recv)) if(recv == 2): GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.LOW) GPIO.output(25, GPIO