草庐IT

MPI_Recv

全部标签

python - TCP 非阻塞 socket.connect() 和 socket.recv() 错误问题。 (Python 或 C)

我正在用Python脚本对一个简单的HTTP重定向服务器进行一些压力测试。该脚本设置了带有非阻塞套接字的epoll(边缘触发模式)。但是我观察到一些我不太明白的东西,1)epoll可以在connect()过程中得到ECONNREFUSED和ETIMEOUTerrno。它们不是都表示远程服务器无法接受连接吗?它们有何不同,客户如何区分?2)有时当epoll通知EPOLLIN时,socket.recv()返回空字符串而不会抛出任何异常(或C中的errno),我可以继续读取套接字而不会收到任何异常或错误,它总是返回空字符串。这是为什么?谢谢, 最佳答案

Python 双向 TCP 套接字卡在 socket.recv 上

引用这个例子(和docs):https://pymotw.com/2/socket/tcp.html我正在尝试通过使用TCP的客户端和服务器之间的阻塞套接字实现双向通信。我可以从client->server或server->client获得单向通信,但在尝试接收时套接字仍然被阻塞或“挂起”服务器和客户端上的消息。我正在使用一个简单的算法(recvall),它使用recv,将数据包合并为完整的消息。我知道在发送或读取所有数据之前,套接字会一直被设计阻塞(对吗?),但这不是sendall和recvall负责的吗?为什么在客户端或服务器上禁用recv会“解锁”它并使其工作?最终我做错了什么导

sockets - 当我请求的数据多于立即可用的数据时, `recv` 会阻塞 TCP 套接字吗?

TCP可以任意合并和拆分数据包。因此,假设我这样做,例如,这样的调用:`recv(sock,buf,15,0)`但此刻只有5数据字节立即可用–威尔recv()阻止直到15字节的数据可用,或者我只会得到5字节?我问是因为我想知道我是否可以阅读,例如uint32_t就是这样(假设i是uint32_t类型的变量):if(recv(sock,&i,sizeof(uint32_t),0)或者我更愿意做这样的事情:unsignedcharbuff[sizeof(uint32_t)];ssize_tread_already=0;while(read_already!=sizeof(uint32_t)

sockets - Erlang gen_tcp :recv(Socket, 长度)语义

看完thisanswer,我想了解是否同样适用于对gen_tcp:recv(Socket,Length)的调用。我对文档的理解是,如果缓冲区中有超过Length个字节可用,它们将保留在那里;如果少于Length字节,调用将阻塞,直到有足够的可用字节或连接关闭。特别是,当数据包以2个字节为前缀以小端顺序保存数据包长度时,这应该有效:receive_packet(Socket)->{ok,>}=gen_tcp:recv(Socket,2),gen_tcp:recv(Socket,Length).这是正确的吗? 最佳答案 是(或否,详见评

tcp - MPI程序使用的tcp连接数(MPICH2+nemesis+tcp)

如果使用的MPI是MPICH2,MPI程序将使用多少tcp连接来发送数据?如果您还知道pmi连接,请单独计算它们。例如,如果我有4个进程和另外2个通信器(COMM1用于第一个和第二个进程,COMM2用于第三个和第四个进程);数据在每对可能的进程之间发送;在每一个可能的沟通者中。我使用最近的MPICH2+hydra+默认pmi。操作系统是linux,网络是交换以太网。每个进程都在单独的PC上。因此,这里是数据路径(成对的进程):12(inMPI_COMM_WORLDandCOMM1)13(onlyinMPI_COMM_WORLD)14(onlyinMPI_COMM_WORLD)23(on

c - Perl TCP 套接字编程 vs C recv() 函数。我需要跟踪收到的字节数吗?

我熟悉C语言的TCP/IP编程,但对Perl有点陌生。在C中,您需要围绕recv()语句编写一个循环,因为您不能保证在一个recv()语句中从远程服务器获取所有数据。即while(Size!=0){Status=recv(Socket,Buffer,Size,0);Buffer=Buffer+Status;Size=Size-Status;}我在Perl中看到的几乎所有示例都显示只打印从套接字获得的内容,而没有跟踪接收到的字节。即my$new_sock=$sock->accept();while(){print"$_\n";}close($sock);那么,Perl是否以某种方式确保您

C++ Winsock send,recv - 它们是如何工作的

我是网络编程的新手,我正在尝试了解send和recv等函数在TCP连接中的工作原理。我知道在客户端和服务器之间的连接中,例如,当客户端设法向服务器发送一条消息,消息被分成不同的包,在它到达时,服务器部分检查包的总和是否与发送前相同,如果正常则发送一条消息作为批准返回给客户端。如果出现问题,客户端会重新发送消息。我不明白的是,如果你从客户端发送一条消息,然后让服务器休眠10秒,你仍然可以在客户端做你想做的事,比如发送函数在另一个线程中执行,或者如果您在这10秒内多次使用发送功能,消息将作为当时使用的消息的组合到达。如果有人能解释一下情况,我将不胜感激! 最佳答

c - 如何调试 TCP recv()

我有一个具有双向通信的客户端-服务器-服务器套接字模拟。我的台词recv(fd3,serv3_buf,BUFSIZE-1,0);返回-1如何使用errno.h调试recv? 最佳答案 这是与recv相关的错误的人工解释!ERRORSThesearesomestandarderrorsgeneratedbythesocketlayer.Addi‐tionalerrorsmaybegeneratedandreturnedfromtheunderlyingproto‐colmodules;seetheirmanualpages.EAGAI

c++ - 强制 recv (Windows C++) 函数阻塞,直到读取 N 个字节

我正在使用this客户端-服务器架构的代码。代码可以轻松运行,没有任何问题。然而,TCP将大数据包分成多个小数据包。问题来自recv函数。我是Windows编程的新手,想知道是否有类似read函数的东西会阻塞,直到它从客户端套接字读取所有N个字节(就像在Linux中,当你想从客户端套接字fd读取时一样)。有什么想法吗? 最佳答案 Windowsrecvdocumentation列出一个MSG_WAITALL标志,它将使调用等待直到给定缓冲区完全填满:MSG_WAITALLThereceiverequestwillcompleteon

perl - 如何在 perl 中使用 TCP 协议(protocol)检查 recv() 和 send() 的返回值?

我使用Perl中的TCP协议(protocol)编写了示例客户端和服务器程序。所以我使用了send()和recv()函数。在那里我试图获取recv()函数的返回值。示例代码是,my$return_value;$return_value=recv($client_socket,$data,50,0);print"returnvalueis:$return_value\n";当我执行我的代码时,它没有打印任何值。例如:returnvalueis:之后我阅读了下面的链接,尽管我没有得到任何返回值。returnvalueofrecv()functioninperl我该如何解决这个问题?谢谢。