- 论坛徽章:
- 0
|
我已经用setsockopt设置了超时值,为何recvfrom还是执行不下去呢
原帖由 "dsd999" 发表:
setsockopt的返回值都是0阿,没有错误。
我认为比较好的解决办法是通过setljmp和alarm之类的函数来控制网络操作的超时。
请问具体是如何实现的阿
- #include <setjmp.h>;
- jmp_buf jmp_env;
- int RECVFROM()
- {
-
- if( setjmp( jmp_env )!=0 ) { /* net timer out */
- printf( "time out!\n" );
- return( -1 );
- }
- signal( SIGALRM, timeout );
- alarm( 60 );
- if( recv( sock, buff, 4096, 0 )<0 )
- {
- printf( "接收失败!\n" );
- alarm( 0 );
- return( -1 );
- }
- alarm( 0 );
- printf( "接收成功!\n" );
- return( 0 );
- }
- void timeout()
- {
- longjmp( jmp_env, 1 );
- }
复制代码
对于setjmp的具体用法你可以查一下手册。 |
|