关闭socket的问题

pjie131 2010-05-13 11:41:39
udp接收数据时,

如果socket没有数据,则函数recvfrom会一直阻塞,那该怎样退出呢?

如果用非阻塞方式,可否有一个实例代码。

不要mfc下的代码。
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanneret1234 2010-05-13
  • 打赏
  • 举报
回复
select 可以设置超时

recvfrom前先select 看select的返回值看是否超时
Eleven 2010-05-13
  • 打赏
  • 举报
回复
使用非阻塞I/O,设置超时值
int nTime = 5000;
setsockopt(SOCKET, SOL_SOCKET, SO_RECVTIMEO, (char*)&nTime, sizeof(nTime);
pjie131 2010-05-13
  • 打赏
  • 举报
回复
udp链接,不用调用connect,调用了,也报错。
breezescut 2010-05-13
  • 打赏
  • 举报
回复
1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用connect函数
2.调用connect,正常情况下,因为TCP三次握手需要一些时间;而非阻塞调用只要不能立即完成就会返回错误,所以这里会返回EINPROGRESS,表示在建立连接但还没有完成。
3.在读套接口描述符集(fd_set rset)和写套接口描述符集(fd_set wset)中将当前套接口置位(用FD_ZERO()、FD_SET()宏),并设置好超时时间(struct timeval *timeout)
4.调用select( socket, &rset, &wset, NULL, timeout )
返回0表示connect超时
如果你设置的超时时间大于75秒就没有必要这样做了,因为内核中对connect有超时限制就是75秒。
pjie131 2010-05-13
  • 打赏
  • 举报
回复
超时,或事件怎么设置?

关掉?是不是直接掉用closesocket就好了?我在另外一个线程调用closesocket行么?
abzhang2 2010-05-13
  • 打赏
  • 举报
回复
你可以设置超时值。或者弄成事件等等
bragi523 2010-05-13
  • 打赏
  • 举报
回复
socket关掉就好了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧