首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.3.7 接收数据

接收数据与发送数据一样容易。下面是recv()函数的函数定义:

int recv( int socket, char *buffer, int len, int flags );

你可能已经看到了,这些参数与send()函数中的参数是一样的,因此可以类似于下面这样来调用它:

char buffer[128];

int received;

received = recv( datasock, buffer, 128, 0 );

这创建一个足够容纳128字节数据的缓冲区,然后就等待数据流入。需要注意的是,这一函数在接收满128字节数据之前就可能返回,它最多只接收128字节,因此不必担心缓冲区溢出。

同样,如果函数执行失败,则返回-1。表2.9列出了此函数的错误代码。

表2.9 recv () 函数的错误代码

错    误

含    义

ENETDOWN

网络已经失败并断开

EFAULT

一个或多个参数无效

ENOTCONN

套接字没有被连接

EINPROGRESS

对此函数的调用仍在进行中,因此不能完成新的调用

ENETRESET

网络已经复位,连接已经断开

ENOTSOCK

传递过来的套接字描述符不是真正的套接字

EOPNOTSUPP

套接字不支持这一函数或选项

ESHUTDOWN

套接字已经被关闭

EWOULDBLOCK

函数由于阻塞而退出

EINVAL

套接字无效

续表

错    误

含    义

ECONNABORTED

连接异常中止,套接字不再可用

ETIMEDOUT

连接被出乎意料地关闭

ECONNRESET

连接被对方关闭

WSAENOTINITIALIZED(注释1)

Socket库没有初始化

注释1:只适用于Winsock。

需要注意的是,recv()也是一个阻塞函数。它停止当前线程中的一切操作,并等待下一个TCP包到达。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论