此帖出自实时操作系统RTOS论坛
最新回复
楼主您好,是否可以尝试将套接字设置为非阻塞方式?
blBlockflag = TRUE;//设置为非阻塞方式
ioctl(socket, FIONBIO, (INT32)&blBlockflag);
我写的代码是调用read()//此时read()不会阻塞,立刻返回
如果返回 -1 则表示超时
如果返回 0 表示对端关闭了socket
如果返回正数,表示接受到的字节数
这样,你就可以通过一个循环来实现超时退出了
/* 下面是我程序里的一部分,是要读取1个字节的启动字符 */
while (dwCounter < 30000)
{
n = read(dwFd, (CHAR *)&cStartChar, 1);
if (n == 0)
{
return NULL;//对端关闭了链路
}
if (n == -1)
{
dwCounter++;
taskDelay(1);
continue;
}
if (n != 1)
{
#ifdef P102IODEBUG
logMsg("读取启动字符失败!!!\n", 0,0,0,0,0,0);
#endif
cStartChar = 0;
continue;
}
break;
}
不知道这样的方法在楼主的程序里是否可行,
我们使用的接口不同,
但是应该有类似的方式。
详情
回复
发表于 2009-2-24 12:46
| ||
|
||
| |
|
|
| |
|
|
此帖出自实时操作系统RTOS论坛
| ||
|
||
提示: 作者被禁止或删除 内容自动屏蔽
| |
|
|
此帖出自实时操作系统RTOS论坛
| ||
|
||
| |
|
|
此帖出自实时操作系统RTOS论坛
| ||
|
||
| |
|
|
| |
|
|
| |
|
|
此帖出自实时操作系统RTOS论坛
| ||
|
||
EEWorld Datasheet 技术支持