草庐IT

while-read

全部标签

python - 尝试 TCP 连接时 while() 中出现奇怪的 print() 输出

问题是:client()中的print()只输出一行,而我希望它打印多行,因为while它所在的循环显然运行了不止一次。当我测试FoundationsofPythonNetworkProgramming,3rdEdition一书中给出的示例代码时出现问题。此示例代码基本上创建了一个简单的TCP服务器/客户端,用于处理/发送简单的文本大写请求。以下是代码:#!/usr/bin/envpython3#FoundationsofPythonNetworkProgramming,ThirdEdition#https://github.com/brandon-rhodes/fopnp/blob/

c# - NetworkStream:ReadTimeout 及其效果 Read()

我对如何使用ReadTimeout以及它如何影响Read()感到困惑。当尝试读取网络流时,有3种情况,假设我们正在尝试读取X个字节:数据可用,字节数据可用,bytes=X数据可用,字节数>X没有可用数据,ReadTimeout>0没有可用数据,ReadTimeout=0文档有点模棱两可,没有明确提及Read()调用中的ReadTimeout,或者ReadTimeout是否影响Read()调用。Thismethodreadsdataintothebufferparameterandreturnsthenumberofbytessuccessfullyread.Ifnodataisavai

c - 错误 : Invalid argument while trying to accept a connection from a client

我正在尝试使用TCP将客户端连接到服务器。我想我的客户正确地完成了他的工作,但服务器无法接受连接。这是我的代码:服务器:intmain(intargc,char*argv[]){intport,sock,newsock,thread_pool_size,queue_size;structsockaddr_inserver,client;structsockaddr*serverptr=(structsockaddr*)&server;structsockaddr*clientptr=(structsockaddr*)&client;structhostent*rem;socklen_t

c - Linux TCP/IP 诊断为什么在 C 程序中 TCP/IP read() 返回 0

我有许多C程序在Linux主机(RHEL6.6)上运行。它们与同一主机上的其他应用程序有TCP/IP连接。每个连接上的流量很少。每隔一段时间,对同一主机上进程的其中一个套接字的read()调用会返回0。这些套接字通常在应用程序的生命周期内保持不变,因此它们在正常操作期间不会完全关闭。我希望如果发生错误,例如另一端崩溃,read()将返回-1并设置errno。所以,问题是-除了TCP/IP连接被另一端彻底关闭(shutdown(fd);close(fd))之外,是否还有其他原因会导致read()调用返回0?read()的手册页指出仅在EOF时返回0,而recv()手册页指出它返回“当对等

asynchronous - 我如何 read_until future 链中的 tokio::net::TcpStream?

我想从TcpStream读取数据,直到遇到“\0”。问题是tokio::io::read_until需要流为BufRead。fnpoll(&mutself)->Poll{matchself.listener.poll_accept()?{Async::Ready((stream,_addr))=>{lettask=tokio::io::read_until(stream,0,vec![0u8;buffer]).map_err(|_|...).map(|_|...);tokio::spawn(task);}Async::NotReady=>returnOk(Async::NotReady

python - 在 python 中读取套接字时,os.read 和 socket.recv 之间有什么区别吗?

假设我有一个socket。这两行代码有什么区别?第1行:os.read(some_socket.fileno(),1024)第2行:some_socket.recv(1024)...除了第一个不能在Windows上运行的事实。换句话说,我可以用第二行代替第一行吗?我有一个代码库还没有真正用Windows测试过,这导致了麻烦。 最佳答案 第1行使用带下划线的文件描述符来读取套接字,因此它是平台相关的。使用第2行,因为它是一种可移植的、多平台的方式来完成同样的事情。强制性:如果您正在做任何严肃的事情,最好避免处理低级套接字。他们很难做到

c - Fork Process/Read Write through pipe 慢

回答https://stackoverflow.com/a/12507520/962890太琐碎了..args!但收到了很多好的信息。感谢大家。编辑github链接:https://github.com/MarkusPfundstein/stream_lame_testing原帖我有一些关于通过管道进行IPC的问题。我的目标是接收每个TCP/IP流的MP3数据,通过LAME将其解码为wav,进行一些数学运算并将其存储在磁盘上(作为wav)。我在整个过程中都使用非阻塞IO。让我有点恼火的是,tcp/ip读取比管道线槽快得多。当我发送~3MBmp3时,文件会在几秒钟内在客户端读取。一开始,

linux - epoll TCP 边缘触发最后一次 read(2) 调用的必要性

给定一个非阻塞TCP套接字,如果调用read(sock,buf,bufLen)返回一个值bufLen,然后等待边缘触发的EPOLLIN事件是否安全?还是我必须再次调用read以确保它为零或EAGAIN?在我的测试中,当我删除最后一个调用时,一切都保持正常,我只是想知道它是否在任何地方或Linux源代码中得到保证,以及我是否可以摆脱额外的调用。 最佳答案 你的问题在man7epoll中得到了回答。如您所见,它取决于套接字类型(数据包/流):Q9使用EPOLLET标志(边沿触发行为)时,是否需要连续读/写文件描述符直到EAGAIN?A9

c++ - boost::asio::async_read 在换行符上返回文件结尾错误

我正在尝试使用async_read和async_write向服务器发出简单的tcp请求并设置超时。问题是async_read在尝试读取直到传输结束时给出错误,在第一个'\n'上它返回错误(文件结束)。逐行读取字符串时(当eots->at(last_request)='\n')时,它成功读取了整个响应。if(eots->at(last_request)=="")//readuntilend{boost::asio::async_read(socket_,input_buffer_,boost::asio::transfer_at_least(1)//readuntillendorerro

c - TCP 套接字 : Can read() still fail with EINTR when select() indicates there are data available?

我正在使用select()从TCP套接字进行非阻塞read()。当select()指示有数据可供读取时,我不确定在read()之后是否还需要处理EINTR。 最佳答案 是的,绝对是。select函数是一个状态报告函数,它会在您调用select和您注意到它的返回值之间的某个时间报告某物的状态。它绝对没有任何future保证。这是一个非常普遍的误解。但是认为select确保future的操作将提供某些特定结果的想法与认为检查磁盘上是否有可用空间意味着future的写入不会失败一样是错误的。根据其判断,即使您认为有足够的可用空间,该实现也