| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 495 人关注过本帖
标题:关于套接字的一个问题
只看楼主 加入收藏
yule19840306
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-8-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
关于套接字的一个问题
按我的理解是:创建一个套接字SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0) ;sockClient应该默认是阻塞模式。当执行函数connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));后应该连接成功再往下执行。没有连接成功就应该阻塞在connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));函数处。
    问题是:为何在没有连接成功的情况下没有发生阻塞。connect()函数直接就返回了。请大神解释下,万分感谢。
2014-08-17 13:53
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:10 
阻塞是指调用结果返回之前,当前线程会被挂起。
例如,在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-08-17 18:19
yule19840306
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-8-17
收藏
得分:0 
回复 2 楼 funyh250
谢谢回复,可是我写的程序没有挂起啊。connect函数直接就返回了。并且往下执行了。请问是什么情况呢?
2014-08-17 20:46
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
收藏
得分:10 
回复 楼主 yule19840306
套接字分为阻塞和非阻塞的。
对于阻塞套接字的IO操作如receive、connect等是阻塞的但并不是一直等待,当超过一定时间没有成功就会返回。
若无错误发生,则connect()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。对阻塞套接口而言,若返回值为SOCKET_ERROR则应用程序调用WSAGetLsatError()可以获取错误代码。

Figure out what you like. Try to become the best in the world of it.
2014-08-18 22:33
快速回复:关于套接字的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016013 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved