CSocket

CObject
 └CAsynSocket
    └CSocket

CSocket类是从CAsyncsocket派生而来的,它继承了CAsyncsocket对WindowsSockets API的封装。与CAsyncsocket对象相比,CSocket对象代表了WindowsSockets API的更高一级的抽象化。CSocket与类CSocketFile和CArchive一起来管理对数据的发送和接收。
一个CSocket对象也支持阻塞,这对于CArchive的同步操作来说是必要的。块操作函数,比如Receive,Send,ReceiveFrom,SendTo,和Accept(都是从CAsyncsocket继承来的),都不返回一个CSocket对象中的WSAEWOULDBLOCK错误。取而代之,这些函数等待,直到操作完成。另外,当这些函数中的某一个是阻塞的时,如果调用了CancelBlockingCall,则原来的调用将因为WSAEINTR错误而终止。
要使用一个CSocket对象,调用构造函数,然后调用Create来创建基础 插槽句柄(插槽类型)。Create的缺省参数创建一个插槽,但是如果你不是用一个CArchive对象来使用这个插槽,则你可以指定一个参数来创建一个数据包 插槽来代替,或者是结合一个指定的端口来创建一个服务器插槽。在客户方使用Connect,则服务器方使用Accept来与一个客户插槽连接。然后再创建一个CSocketFile对象,并在CSocketFile的构造函数中将它连接到CSocket对象上。再接着,创建一个CArchive对象用来发送数据,一个用来接收数据(如果需要),然后在CArchive构造函数中将它们与CSocketFile对象连接。当通讯完成后,销毁CArchive,CSocketFile,CSocket对象。
更多的信息,参见Win32 SDK文档中的“Windows 插槽 2 概述”和“Windows插槽设计思考”。
#include <afxsock.h>
请参阅:CAsyncsocket, CSocketFile

CSocket类成员

构造
CSocket构造一个CSocket对象
Create创建一个插槽

属性
IsBlocking确定一个阻塞调用是否在进行中
FromHandle返回一个指向CSocket对象的指针,给出一个插槽句柄
Attach将一个插槽句柄与一个CSocket对象连接

操作符
CancelBlockingCall取消一个当前在进行中的阻塞调用

可重载
OnMessagePending当等待完成一个阻塞调用时调用此函数来处理悬而未决的消息