社区
网络编程
帖子详情
如何用完成端口实现不阻塞的accept
heroboy2000
2005-01-18 01:20:52
我看windows网络编程上的示例accept是阻塞的
如何实现不阻塞的accept
能给出例子吗?
...全文
242
10
打赏
收藏
如何用完成端口实现不阻塞的accept
我看windows网络编程上的示例accept是阻塞的 如何实现不阻塞的accept 能给出例子吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tide2355
2005-01-19
打赏
举报
回复
完成端口的Accept阻塞是在等待新socket的连接上面,
如果你想在这上面少消耗点资源,在客户端仅仅进行少量的收发操作的情况下,可以考虑使用AcceptEx,
在重叠IO应用中,AcceptEx可以以异步方式工作。
runall
2005-01-18
打赏
举报
回复
弱弱的问什么是“完成端口”
heroboy2000
2005-01-18
打赏
举报
回复
请大家看清楚问题
我要求使用“完成端口”!!!
elssann
2005-01-18
打赏
举报
回复
AcceptEx
sharkhuang
2005-01-18
打赏
举报
回复
accept其实就是可读了,再accept就是非阻塞
hawlman
2005-01-18
打赏
举报
回复
消息映射方式WSAAsyncSelect
XmagicX
2005-01-18
打赏
举报
回复
listen
xuzheng318
2005-01-18
打赏
举报
回复
CListeningSocket *m_pSocket;//listening
CClientSocket *pSocket;//for accept client
if(m_pSocket->Accept(*pSocket))
{
pSocket->Initialize();
pSocket->AddTail(pSocket);
}
else //delete;
ancienttale
2005-01-18
打赏
举报
回复
m_sock是先侦听好的端口,你可以对这个端口select,如果有连接过来会在fdread上select到
ancienttale
2005-01-18
打赏
举报
回复
#ifdef UNIX
inline int TSOCK_select( SOCKET sock, DWORD nsec, BOOL bread = TRUE )
{
time_t tbegin = time(0);
int iret;
while( 1 )
{
fd_set fd;
FD_ZERO(&fd);
FD_SET(sock,&fd);
timeval t = { nsec, 0 };
timeval *pt = (nsec >= SOCK_INFINITE)? NULL : &t;
if( bread )
iret = select( sock+1 ,&fd, NULL, NULL, pt);
else
iret = select( sock+1 ,NULL, &fd, NULL, pt);
if( iret == SOCKET_ERROR && errno == EINTR )
{
DWORD nsecpassed = time(0) - tbegin;
if( nsecpassed >= nsec )
return 0;
else
{
nsec -= nsecpassed;
continue;
}
}
else
{
break;
}
}
return iret;
}
#else
inline int TSOCK_select( SOCKET sock, DWORD nsec, BOOL bread = TRUE )
{
fd_set fd;
FD_ZERO(&fd);
FD_SET(sock,&fd);
timeval t = { nsec, 0 };
timeval *pt = (nsec >= SOCK_INFINITE)? NULL : &t;
if( bread )
return select( sock+1 ,&fd, NULL, NULL, pt);
else
return select( sock+1 ,NULL, &fd, NULL, pt);
}
#endif
TCPSocket* Accept()
{
sockaddr_in addr;
memset(&addr,0,sizeof(addr));
SOCK_NAME_LEN_TYPE len;
len = sizeof(addr);
m_bOperateTimeOut = FALSE;
int iret = TSOCK_select(m_sock,m_torecv);
if(iret == 0)
{
m_bOperateTimeOut = TRUE;
return NULL;
}
if(iret < 0)
{
m_errcode = WSAGetLastError();
return NULL;
}
SOCKET sAcc = accept(m_sock,(sockaddr*)&addr,&len);
if(sAcc != INVALID_SOCKET)
{
TCPSocket* pSock = new TCPSocket(sAcc);
if(!pSock)
{
closesocket(sAcc);
return NULL;
}
else
{
pSock->SetTimeOut( m_torecv, m_tosend );
return pSock;
}
}
else
return NULL;
}
IO
完成
端口
简单案例,很简单,以看就会
这种TCP模式的
完成
端口
比较容易理解,但是在UDP协议下的
实现
就比较难于考虑,他没有
Accept
的
阻塞
,主线程比较难于处理。如果没有这个主线程,WsaRecfrom函数又不知道放在哪里才能够通知GetQueuedCompletionStatus...
基于Java的Socket
实现
TCP连接.zip
它可以
完成
7个基本操作: 连接远程机器,发送数据,接收数据,关闭连接,绑定
端口
,监听入站数据,在绑定
端口
上接受来自远程机器的连接。当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时...
CCNA_CCNP 思科网络认证 PAT NAT
端口
或地址转换 与端
Re:CCNA_CCNP 思科网络认证 PAT NAT
端口
或地址转换 与
端口
映射 ====================== # 本章课程大纲 公网地址和私网地址 NAT应用场景 ...
Linux Socket 编程简介和
实现
在 TCP/IP 协议中,”IP...服务器调用 socket()、bind()、listen() 函数
完成
初始化后,调用
accept
()
阻塞
等待,处于监听
端口
的状态,客户端调用 socket() 初始化后,调用 connect() 发出 SYN 段并
阻塞
等待服务器应答,
服务器端的java聊天室
服务器的根本创建方法是 创建一个ServerSocket的对象,让对象在某个
端口
上监听。 调用
accept
方法
阻塞
端口
,如果有客户机连接上了服务器的该
端口
,然后启动一个新的socket与该客户机进行通信。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章