ChinaUnix.net
相关文章推荐:

linux 非阻塞socket recv 0

本帖最后由 hanzhenlll 于 2012-12-11 12:54 编辑 有朋友说,阻塞recv有可能接收到的数据并不完整,,,,说SELECT 有可能检测到一个字节的数据就通知可读,但是实际后面还有数据没有读完整recv就结束了.... 元芳们? 你们怎么看? 是否需要增加 recv返回值的检查... 一直到满足到需要接收字节长度大小为止?

by hanzhenlll - C/C++ - 2012-12-11 16:54:29 阅读(3531) 回复(4)

相关讨论

这几天写的一个telnet客户端类, 这个类被别的程序调用, 跟server发命令并取结果.所有的操作都不能无限时等待. 所以必须加时间控制, 可是出现了一些怪问题 程序没有设置阻塞时, 一切正常, 只是有些地方会一直等下去, 无法响应用户操作.但 1. 用setsockopt将recv的timeout设为一秒(就是SO_RCVTIMEO选项), 可以在windows下正常工作, 不过在unix下, 这句一直返回-1, error为EINTR. 我用while来一直setsockopt, 每次返回值都是这样, 而...

by galaxywar - C/C++ - 2011-06-27 21:49:47 阅读(15823) 回复(8)

有A,B两个台机器,运行同一个程序,程序中会用分别用IPa, IPb 和端口1521 先Listen(listen监听多个连接), 然后用阻塞socket 去连接对端。连接正常情况下,有两条链路,每条链路有1s的心跳检测, 10秒超时候,重新建立自己的链路(即哪条链路断开,就重建哪条)。 1) 在A上查到链路信息: channel1 :172.30.128.22:1521<-172.30.128.21:44410 channel2 :172.30.128.22:51967->172.30.128.21:1521 2)和3)都...

by river617 - Linux环境编程 - 2010-07-03 09:30:38 阅读(1437) 回复(3)

linux下面socket编程的阻塞TCP研究 tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分...

by marvinlee - Linux文档专区 - 2009-08-30 03:00:01 阅读(2042) 回复(0)

引用链接:http://xufish.blogbus.com/logs/40537344.html tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据.在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存...

by zlm8715 - 网络技术文档中心 - 2009-07-30 12:36:05 阅读(1343) 回复(0)

linux socket编程之阻塞套接字和阻塞套接字    每一个TCP套接口有一个发送缓冲区,可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用进程调用 write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这是通常的缺省设...

by marvinlee - Linux文档专区 - 2009-08-30 03:11:46 阅读(915) 回复(0)
by smilinglw - Linux环境编程 - 2009-02-25 15:55:41 阅读(2192) 回复(1)

本帖最后由 chobit_s 于 2011-08-24 23:51 编辑 [code]#include #include #include #include socket.h> #include static int sockfd; void sigint(int num) { close(sockfd); printf("closed\n"); } int main(int argc, char **argv) { char buf[512]; int len; signal(SIGINT, sigint); sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); len = recv(sockfd, (v...

by chobit_s - 内核源码 - 2011-09-10 11:21:12 阅读(3575) 回复(1)

recv_bytes = recv( buf, buflen ) 当对方传来的数据 > buflen的时候, 是不是需要用循环recv? 那么,退出循环的条件是什么? 如果判断 recv_bytes != buflen 时退出, 万一对方传来的数据恰巧=buflen, 会进下一次循环,造成阻塞。 前提:不知道对方会传来多长的数据

by shenyue_sam - Perl - 2010-11-01 15:01:03 阅读(7241) 回复(19)

这个是客户端, 我见书上,网上大家写socket 几乎都是这样一个模式。 # -*- coding: cp936 -*- import socket,select host = "127.0.0.1" port = 9009 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send("SELECT * FROM tt") x = '' while True: a = s.recv(4000) if not len(a): break x = x + a print '%s\n' % len(a) print x s.close() 但实际中,我郁闷的是这一...

by 逆雪寒 - Python - 2010-01-22 22:09:54 阅读(11021) 回复(5)

现在开了一个线程,要在里边管理两个阻塞socket,一个用于发送指令,另一个用于大数据量的传输,有什么需要注意的吗? 如果有相关代码提供参考最好了。多谢!!

by lzh8430 - Linux环境编程 - 2014-07-23 08:53:33 阅读(1129) 回复(2)