当前位置: 技术问答>linux和unix
scanf 的阻塞问题
来源: 互联网 发布时间:2017-04-07
本文导语: 聊天室程序,如何解决scanf阻塞的问题? 客户端的select部分代码如下: while( 1 ) { /*记录集的初始化*/ FD_ZERO( &sock_set ); FD_SET( sockfd, &sock_set ); FD_ZERO( &write_set ...
聊天室程序,如何解决scanf阻塞的问题?
客户端的select部分代码如下:
while( 1 )
{
/*记录集的初始化*/
FD_ZERO( &sock_set );
FD_SET( sockfd, &sock_set );
FD_ZERO( &write_set ); //键盘标准输入流的监听
FD_SET( 0, &write_set );
/*时间初始化*/
tv.tv_sec = 5;
tv.tv_usec = 0;
res = select( FD_SETSIZE, &sock_set, &write_set, NULL, &tv );
switch( res )
{
case -1:
fprintf( stderr, "select error.n" );
exit( EXIT_FAILURE );
case 0:
break;
default:
if( FD_ISSET(sockfd, &sock_set) || FD_ISSET(0, &write_set) )
{
if( FD_ISSET(sockfd, &sock_set) )
{
nbytes = recv( sockfd, online_buff, sizeof(online_buff), 0 );
if( nbytes
客户端的select部分代码如下:
while( 1 )
{
/*记录集的初始化*/
FD_ZERO( &sock_set );
FD_SET( sockfd, &sock_set );
FD_ZERO( &write_set ); //键盘标准输入流的监听
FD_SET( 0, &write_set );
/*时间初始化*/
tv.tv_sec = 5;
tv.tv_usec = 0;
res = select( FD_SETSIZE, &sock_set, &write_set, NULL, &tv );
switch( res )
{
case -1:
fprintf( stderr, "select error.n" );
exit( EXIT_FAILURE );
case 0:
break;
default:
if( FD_ISSET(sockfd, &sock_set) || FD_ISSET(0, &write_set) )
{
if( FD_ISSET(sockfd, &sock_set) )
{
nbytes = recv( sockfd, online_buff, sizeof(online_buff), 0 );
if( nbytes