LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2674|回复: 3

recv()函数第四个参数为0时是不是阻塞方式?

[复制链接]
发表于 2006-5-27 15:13:01 | 显示全部楼层 |阅读模式
recv()函数如果第四个参数为0是不是阻塞方式?
如果是,第四个参数为MSG_WAITALL还有什么用,这个也是阻塞方式.
如果是,那么书上说recv()第4参数为0时就相当于read(),那么read()是阻塞方式吗?
//server.cpp
int sockid;
char buf[100];
char rbuf[100];
..................     //sock连接.
do
{
       printf("please input Message:"):
       scanf("%s",buf);
       send(sockid,buf,sizeof(buf),0);
       recv(sockid,rbuf,sizeof(rbuf),0);
       printf("Clent said:%s",rbuf);
}while(1);


//client.cpp
int sockids;
char buf[100];
char rbuf[100];
......................//sock连接
do
{
       recv(sockids,rbuf,sizeof(rbuf),0);
       printf("Server siad:%s",rbuf);
       printf("please input Message:");
       scanf("%s",buf);
       send(sockids,buf,sizeof(buf),0);
}


[quote]
这点代码可以实现(注意顺序,一定不能乱,乱了就错了)
server发消息,一定要server方先发.
client接收消息后,再输入消息,client发消息
server接收消息后,再输入消息,server发消息
client接收消息后,再输入消息,client发消息
.....................
也就是这样一直下去...很显示,证明了recv()函数第4个参数加0时就为阻塞方式.我说的对吗?
发表于 2006-5-27 15:30:54 | 显示全部楼层
阻塞的设置用fcntl或者是ioctl
回复 支持 反对

使用道具 举报

发表于 2006-5-27 15:31:12 | 显示全部楼层
跟socket相关的,你要调用fcntl设置其为非阻塞,否则为阻塞。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 16:24:25 | 显示全部楼层
Â了.谢谢.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表