ChinaUnix.net
相关文章推荐:

linux socket 阻塞

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

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

相关讨论

我们用的开发平台是基于linux 2.4 内核代码上的,上层的应用程序都是通过socket进行通信的(包括进程间通信和网络通信),socket都设置位nonblock,但是最近经过测试发现有两种情况下socket的系统调用会一直阻塞不能返回: 1,select的调用,这种情况下的socket是作为服务端,且已经建立了连接,我们对select设置了超时时间,但有时候可能是由于调用select太频繁(服务端向客户端发送大数据,服务端把大数据分片发送,select就是等...

by wwzg99 - 内核/嵌入技术 - 2006-09-20 17:16:32 阅读(1299) 回复(0)

如果l_onoff =1,l_linger=1,close socket后,是不是应用程序立即返回,而内核仍然在继续发送socket里的残余数据。

by boldeagle - C/C++ - 2009-08-27 17:51:59 阅读(1244) 回复(0)

阻塞socket 定时connect 一台机器,如果对端不应答的话,第一次连接是syn_send状态,第二次连接时,connect会返回什么错误号?

by boldeagle - C/C++ - 2009-06-18 11:14:35 阅读(2565) 回复(7)

unix的是不是一定要在使用socket之前才能设置它是否为阻塞?

by javier_zh - 程序开发 - 2006-07-04 20:05:31 阅读(727) 回复(2)

我用下面的语句读socket数据 while ($buffer) { $buffer = undef; recv(socket,$buffer,256,0); $receive .= $buffer; } 读了几次数据后,数据传完了时执行到recv(socket,$buffer,256,0);就阻塞了,不往下了。我想知道怎么去判断数据已经传完了应该往下执行了呢?我看了帮助,好象跟socket阻塞与否有关,要用什么fcntl函数,不过不知道跟这有什么关系。

by 2bedodo - Perl - 2004-09-02 01:29:57 阅读(1536) 回复(1)

我用阻塞模式的套接字,为什么连接上以后,就算对方不发送数据recv函数也不会阻塞呢? 和我在局域网里作实验速度快有什么关系吗? 或者是不是系统内部有一个时钟,阻塞了一定时间会停止阻塞呢?

by gloriajie - C/C++ - 2004-08-02 11:01:05 阅读(957) 回复(3)

如果l_onoff =1,l_linger=1,close socket后,是不是应用程序立即返回,而内核仍然在继续发送socket里的残余数据。

by boldeagle - 网络技术 - 2009-08-28 11:18:26 阅读(2334) 回复(2)

socket编程中,有时会需要这样一种情况:服务器不断的向输出流中输出数据,客户端不断的读取数据。同时,只要客户端的输入流中有可读的数据,立即读取,如果没有,则阻塞等待。 但是客户端的输入流不可能保证在它想读数据的时候就一定会有可读的数据,如果直接去读的话就会抛出异常,为了避免这种情况的发生,一般的做法是在读取数据前先检查输入流中是否有可读数据:有,读取;没有,等待。就像下面的一样,这里省去服务器部分,强...

by crazypeach - Java文档中心 - 2008-07-12 11:28:04 阅读(1185) 回复(0)

对一个非阻塞socket(tcp ,ipv4) 调用close 不是会直接导致发送RST而不是FIN? 我试验了下是这样的哦 没有看到FIN了 SO_LINGER设置没有问题的 SO_LINGER: default = l_onoff = 0, l_linger = 0

by stuff990 - C/C++ - 2007-08-31 18:12:54 阅读(1402) 回复(0)

各位前辈,我用 [code] Selector selector = null; try { // Create the selector selector = Selector.open(); socketChannel sChannel1 = createsocketChannel("hostname.com", 80); sChannel1.register(selector, sChannel1.validOps()); } catch (IOException e) { } while (true) { try { selector.select(1000); } catch (IOException e)...

by HappyWin - Java - 2007-01-08 23:28:00 阅读(1741) 回复(1)