社区
网络编程
帖子详情
在VC中如何将一个UDP的socket设置成为非阻塞的阿?---Online waiting
reclusewood
2002-12-03 04:56:42
rt
...全文
626
11
打赏
收藏
在VC中如何将一个UDP的socket设置成为非阻塞的阿?---Online waiting
rt
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cqjiang
2002-12-04
打赏
举报
回复
http://idoor.xiloo.com 《TCP/IP Winsock高级编程》
ysf1980
2002-12-04
打赏
举报
回复
WSAAsyncSelect():要求某一 Socket 有事件 (event) 发生时通知使用者。
格 式: int PASCAL FAR WSAAsyncSelect( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent );
参 数: s Socket 的编号
hWnd 动作完成後,接受讯息的视窗 handle
wMsg 传回视窗的讯息
lEvent 应用程式有兴趣的网路事件
传回值: 成功 - 0
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
WSAAsyncSelect( s, hWnd, 0, 0 ) -- 取消所有 async 事件设定
呼叫 WSAAsyncSelect 的同时也将此一 socket改变成「非阻拦」(non-blocking)模式。但是此时这个 socket 不能很简单地用 ioctlsocket() 这个函式就将它再变回「阻拦」(blocking)模式。也就是说 WSAAsyncSelect 和 ioctlsocket 所改变的「非阻拦」模式仍是有些不同的。如果您想将一个「非同步」(asynchronous)模式的 socket 再变回「阻拦」模式的话,必须
先呼叫 WSAAsyncSelect() 将所有的 async 事件取消,再用 ioctlsocket() 将它变回阻拦模式。
ioctlsocket():控制 Socket 的模式。
格 式: int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR *argP );
参 数:s Socket 的识别码
cmd 指令名称
argP 指向 cmd 参数的指标
传回值: 成功 - 0
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
说明: 此函式用来获取或设定 Socket 的运作参数。
cmd 的值可为:
FIONBIO -- 开关 non-blocking 模式
FIONREAD -- 自 Socket 一次可读取的资料量(目前 in buffer 的资料量)
SIOCATMARK -- OOB 资料是否已被读取完
reclusewood
2002-12-04
打赏
举报
回复
救命啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sjzxyg
2002-12-04
打赏
举报
回复
0
reclusewood
2002-12-04
打赏
举报
回复
顶哦,高手来提示一下!
shesh
2002-12-04
打赏
举报
回复
我以前做的,好象有setsockopt,这是设置超时的.数据报方式的设置是一样的.
不过告诉你.这设置超时只有winsock2.0才支持
WSADATA data;
sockaddr_in addr;
int ret=0;
int optval = 10000;
char m_put_str[512]="";
char m_Port[6];
memset(m_Port,0,sizeof(m_Port));
strcpy(m_Port,(LPCTSTR) AfxGetApp()->GetProfileString("系统设置","TCP侦听端口","3333"));
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(m_Port));
if(WSAStartup(MAKEWORD(2, 2), &data))
{
return FALSE;
}
if (LOBYTE(data.wVersion)!=2||HIBYTE(data.wVersion)!=2)
{
return FALSE;
}
Sck = socket(AF_INET, SOCK_STREAM, 0);
if(Sck==INVALID_SOCKET)
{
return FALSE;
}
ret = bind(Sck, (sockaddr*)&addr, sizeof(addr));
if(ret==SOCKET_ERROR)
{
return FALSE;
}
if(setsockopt(Sck,SOL_SOCKET,SO_SNDTIMEO,
(char * )&optval,sizeof(optval))==SOCKET_ERROR)
{
return FALSE;
}
if(setsockopt(Sck,SOL_SOCKET,SO_RCVTIMEO,
(char * )&optval,sizeof(optval))==SOCKET_ERROR)
{
return FALSE;
}
if(listen(Sck, SOMAXCONN) == SOCKET_ERROR)
{
return FALSE;
}
DWORD m_ThreadId;
m_ThreadHandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) DummyMyThread,
this,CREATE_SUSPENDED|THREAD_TERMINATE,&m_ThreadId);
if(!m_ThreadHandle)
{
return FALSE;
}
ResumeThread(m_ThreadHandle);
return TRUE;
reclusewood
2002-12-03
打赏
举报
回复
WSAAsyncSelect();
setsockopt();
他们中间参数怎么设置阿
ysf1980
2002-12-03
打赏
举报
回复
你用WSAAsyncSelect();
它自动就变为非阻塞模式,除非你用setsockopt()
改变它
reclusewood
2002-12-03
打赏
举报
回复
拜托写详细一点,我也在看msdn,不过没有什么头绪
救命啊~~~~~~~~~~~~~~~~`
reclusewood
2002-12-03
打赏
举报
回复
兄弟哦,详细一些,多谢了,嘿嘿。
zfive
2002-12-03
打赏
举报
回复
setsockopt()
socket
端口定义大全
from: http://www.iana.org/assignments/port-numbers
////////////////////////////////////////////////////////////////////////////////
PORT NUMBERS (last updated 2010-09-24) The port numbers are divided into three ranges: the Wel
3-Transport Layer
Please indicate the source: http://blog.csdn.
ne
t/gaoxiangnumber1 Welcome to my github: https://github.com/gaoxiangnumber13.1 Introduction and Transport-Layer Services A transport-layer protocol provid
QEMU KVM libvirt 手册(3) - Storage Media
访问Hard Drive 使用-hda –hdb qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.img -hdb ubuntutest1.img -boot c -vnc :19 -
ne
t nic,model=virtio -
ne
t tap,ifname=tap0,script=no,d
树莓派硬件启动失败log记录查看方法
如果硬件启动失败,特别是驱动类的 失效等情况在Linux启动的时候都会记录。但是这个记录在启动阶段的屏幕上刷新非常快,很多时候我们看不到相应的信息。 但是,Linux提供了
一个
很不错的命令dmesg,使用这个命令可以查看故障缓冲区信息。 相应的信息依然很多,可以将命令输出写入到
一个
文件
中
然后进一步查看。下面是我导出的
一个
例子: [ 0.000000] Boot
ing
L
2020-12-03
webrtc+ janus videocall 开发demo 问题: 呼叫端看不到被呼叫端视频, 怀疑被呼叫端的answer格式说步骤存在问题. webrtc+ janus videocall 被呼叫端开发 执行日志
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
--..
网络编程
18,358
社区成员
64,186
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章