有关socket编程里,recv函数返回值为-1的情况
来源:互联网 发布:微气象站 python开发 编辑:程序博客网 时间:2024/06/08 13:21
一、int recv( SOCKET s, char FAR *buf, int len, int flags );
不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。
该函数的第一个参数指定接收端套接字描述符;
第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;
第三个参数指明buf的长度;
第四个参数一般置0。
这里只描述同步Socket的recv函数的执行流程。当应用程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR,如果s的发送缓冲中没有数据或者数据被协议成功发送完毕后,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,只到协议把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据可能大于buf的长度,所以 在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的),recv函数返回其实际copy的字节数。如果recv在copy时出错,那么它返回SOCKET_ERROR;如果recv函数在等待协议接收数据时网络中断了,那么它返回0。
注意:在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,那么调用recv的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。
二、有一次我的rcv函数是这样的。在主函数里调用 Msg_Rcv(socket) ; 而我的Msg_Rcv(socket,char buf[]), 这样我在调用recv(socket,buf,0)时,就会出现返回值为-1的情况。因为我的buf根本不存在,形参的buf没有接受主函数传来的正确地址。
- 有关socket编程里,recv函数返回值为-1的情况
- socket编程里,recv函数返回值为-1的情况
- socket编程recv函数返回值说明
- [笔记]socket recv()函数返回0的一种情况
- socket recv()函数返回0的一种情况
- recv()函数有关返回值
- UNIX网络编程——关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- socket编程 recv()返回值处理
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- C++中的四种强制类型转换的区别
- Android组件 上下文菜单(ContextMenu)
- 浙江大学2010年复试上机题 解题报告
- ORACLE "desc table"对应的SQL语句
- 《产品原型设计软件》(Balsamiq Mockups)v2.0.19
- 有关socket编程里,recv函数返回值为-1的情况
- WP7的5个应用开发计划--学习记录1
- Flex4.x导入fl包
- 大药瓶子
- Android上利用SDK的BluetoothAPI实现传送文件
- SGU 127 Telephone directory
- Maven使用入门(二)
- pdffactory破解版
- oracle排序翻页后数据丢失