社区
网络编程
帖子详情
winsock 阻塞的理解:阻塞时,所有套接字阻塞,还是某个套接字阻塞?
fangcheng
2004-04-29 03:51:54
winsock 阻塞的理解:阻塞时,所有套接字阻塞,还是某个套接字阻塞?
...全文
73
15
打赏
收藏
winsock 阻塞的理解:阻塞时,所有套接字阻塞,还是某个套接字阻塞?
winsock 阻塞的理解:阻塞时,所有套接字阻塞,还是某个套接字阻塞?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangcheng
2004-05-03
打赏
举报
回复
感谢各位的解答
MFCClass(profan) 说的,我猜测他可能认为是在界面线程里处理socket i/o了,我这个问题不是这个意思,我问的是关于多线程的i/o处理
alec626(月吻长河) 这位兄弟可能是经常在界面线程里而不是在工作者线程里操作i/o,所以才有这样的认识
除了几个兄弟和我有相同的错误认识,其他兄弟基本上都有清晰、正确的认识,谢谢各位的解答。
请大家继续帮忙:
http://expert.csdn.net/Expert/topic/3029/3029973.xml?temp=.9331629
halk
2004-04-30
打赏
举报
回复
我认为,阻塞时程序控制权交给了正在执行的socket,程序无法得到控制权,这样像程序死了,
此时其他的socket也不做任何事,这和所有套接字阻塞也有区别,阻塞套接字在工作.
--------------
阻塞的时候,只是该线程处于等待状态,等待该socket上的消息。程序有什么控制权,控制权在cpu手里。线程调度仍然在进行,其他线程仍然会可调度,其它的socket也仍然可以用于工作。
Gladstone
2004-04-30
打赏
举报
回复
造成阻塞的原因:接收数据时端口缓冲区中无数据,这时如果被绑定的端口设置为阻塞
式的,则该操作被阻塞在这里,线程被阻塞,直到有数据到来,该操作完成,线程继续执行。
这个过程中其他端口上的操作是正常的。
可以使用ioctlsocket(m_nSocket, FIONBIO, (ULONG*)&optval)设置端口为非阻塞。
fzd999
2004-04-30
打赏
举报
回复
被阻塞的包括两个方面,一方面是当前套接字所对应的端口被阻塞了,另一方面是当前使用这个套接字的线程被挂起了。
lygfqy
2004-04-30
打赏
举报
回复
应该只是阻塞你当前控制的套接字,而其他的不控制不受影响
whslovexyp
2004-04-30
打赏
举报
回复
调用任何一个阻塞模式的函数,都会产生相同的后果-----耗费或长或短的时间等待操作的完成。它只阻塞调用阻塞函数的套接字。如果程序是单线程的,程序都被阻塞了,如果是多线程的并不影响其他的套接字。
vagabondkq
2004-04-30
打赏
举报
回复
设置某个套接字阻塞,它就阻塞.
UDX协议
2004-04-30
打赏
举报
回复
阻塞是指阻塞正在对这个套接字进行IO的线程,不阻塞其他线程对其他套接字的IO操作
wangle11111
2004-04-30
打赏
举报
回复
阻塞是组塞了现在正在执行的那个套接字,是由于调用某个函数,但这个函数所要求的数据没有及时的拱它使用,所以没有办法了,只能等待了。这样对于能接收多个连接的程序来说就有麻烦了,因为在建立连接的请求者中只要有一个没有把数据传过来,那么响应的函数就要等。而其他的套接字(建立好连接的)即使数据准备好了,发出去了,服务器端也不会响应的,因为它的套接字处于阻塞状态。就好比去买东西,如果对哪个顾客的收银速度慢了,即使你在有钱也要等,等那个顾客交完钱后在去买。。。
sevencat
2004-04-29
打赏
举报
回复
是想哪个阻就哪个阻,想哪个不阻就哪个不阻。
phiger
2004-04-29
打赏
举报
回复
BLOCKING是套接字的可以设置的属性,是针对某一套接字,阻塞是指阻塞正在对这个套接字进行IO的线程,不阻塞其他线程对其他套接字的IO操作
PiggyXP
2004-04-29
打赏
举报
回复
所有的socket都挂起了,
因为其他socket的不到被当前socket占用的资源
月吻长河
2004-04-29
打赏
举报
回复
阻塞时,所有套接字阻塞
你用CSocket做个实验就知道了
微星1234
2004-04-29
打赏
举报
回复
阻塞是所有套接字阻塞的.
MFCClass
2004-04-29
打赏
举报
回复
我认为,阻塞时程序控制权交给了正在执行的socket,程序无法得到控制权,这样像程序死了,
此时其他的socket也不做任何事,这和所有套接字阻塞也有区别,阻塞套接字在工作.
异步非
阻塞
套接字
Winsock
开发网络通信程序开发入门
使用
winsock
虽然比较繁琐,但对于
理解
异步非
阻塞
网络通信的概念非常有用。
vc++ 线程同步与异步
套接字
编程实例
vc++ 线程同步与异步
套接字
编程实例,Windows
套接字
在两种模式下执行I/O操作,
阻塞
和非
阻塞
。在
阻塞
模式下,在I/O操作完成前,执行操作的
Winsock
函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非
阻塞
模式下,
Winsock
函数无论如何都会立即返回。 Windows Sockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,它对网络事件采用了基于消息的异步存取策略。
Socket编程系列之2:Windows-API网络编程入门实战
Socket编程系列初步计划:Socket编程系列之1: Linux-API 网络编程入门实战Socket编程系列之2: ...Windows
套接字
I/O模型 l 原始
套接字
与ICMP l WinInet简介与案例实战
socketjava源码-demo-sockets-io-nio-nio2:“Java
套接字
I/O:
阻塞
,非
阻塞
和异步”文章和源代码
socket java原始码Java
套接字
I / O:
阻塞
,非
阻塞
和异步 介绍 在描述I / O
时
,术语“非
阻塞
”和“异步”通常可以互换使用,但是它们之间存在显着差异。 本文描述了Java中非
阻塞
和异步
套接字
I / O操作之间的理论和实践差异。
套接字
是通过TCP和UDP协议执行双向通信的端点。 Java
套接字
API是用于操作系统相应功能的适配器。 符合POSIX的操作系统(Unix,Linux,Mac OS X,BSD,Solaris,AIX等)中的
套接字
通信由Berkeley
套接字
执行。 Windows中的
套接字
通信由
Winsock
执行,
Winsock
也是基于Berkeley
套接字
的,具有符合Windows编程模型的附加功能。 POSIX定义 本文使用了POSIX规范中的简化定义。
阻塞
的线程-在可以继续执行之前正在等待某种条件的线程。
阻塞
-
套接字
的属性,使
套接字
对其进行调用,以等待所请求的操作在返回之前执行。 非
阻塞
-
套接字
的一种属性,当检测到所请求的动作没有未知的延迟就无法完成
时
,
套接字
的调用将立即返回。 同步I / O操作-导致请求线程被
阻塞
直到该I / O操作完成的I
套接字
编程
#include #include #include #pragma comment(lib,"wsock32.lib") #define MAX_LEN 1024 //数据报格式 struct Mes_pack { char* ip_addr; char* data_buf; int data_len; }; struct Sock_data { SOCKET sock; SOCKADDR_IN addr; }; void InitListenSocket(SOCKET& Listen_Socket) { int ret; WSADATA wsadata; int Port = 5150; SOCKADDR_IN Server_Addr; if ((ret = WSAStartup(MAKEWORD(2,2), &wsadata)) != 0) { printf("WSAStartup failed with error %d\n", ret); return; } if ((Listen_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { printf("socket failed with error %d\n", WSAGetLastError()); WSACleanup(); return; } u_long iMode = 1; ioctlsocket(Listen_Socket, FIONBIO, &iMode);//通常socket运行后默认为
阻塞
模式。要调用ioctlsocket函数设置非
阻塞
模式。 Server_Addr.sin_family = AF_INET; Server_Addr.sin_port = htons(Port); //将16bit字符从host字节序转化成网络字节序 Server_Addr.sin_addr.s_addr = htonl(INADDR_ANY);//将32bit字符从host转化成网络的 if (bind(Listen_Socket, (SOCKADDR *)&Server_Addr, sizeof(Server_Addr))== SOCKET_ERROR) { printf("bind failed with error %d\n", WSAGetLastError()); closesocket(Listen_Socket); WSACleanup(); return; } if (listen(Listen_Socket, 5) == SOCKET_ERROR) { printf("listen failed with error %d\n", WSAGetLastError()); closesocket(Listen_Socket); WSACleanup(); return; } printf("We are awaiting a connection on port %d.\n", Port); }
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章