当前位置:  技术问答>linux和unix

socket fd_isset返回总是0,什么原因啊??

    来源: 互联网  发布时间:2016-03-29

    本文导语:  server端的代码如下,client端向server端发起connect请求,但server端FD_ISSET(sd, &fds)返回的总是0,应该是1 啊,是什么原因呢 (retval返回的是1)? int main() { int sd ; int cflag=1; int sm, new_fd; int i,rc; int fd_num=1; int maxf...

server端的代码如下,client端向server端发起connect请求,但server端FD_ISSET(sd, &fds)返回的总是0,应该是1 啊,是什么原因呢

(retval返回的是1)?
int main()
{
int sd ;
int cflag=1;
int sm, new_fd;
int i,rc;
int fd_num=1;
int maxfd;
int retval;
int sin_size;
char *cip;
char buf[100];
fd_set fds;

struct sockaddr_in sin;
if ((sd = socket( AF_INET, SOCK_STREAM, 0 )) == -1) 
        {
perror( "socket.c: Errer in socket()" );
return 0;
}
if(setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,(char *)&cflag,sizeof(cflag))==-1)
        {
                printf("setsockopt() errorn");
                exit(-1);
        }

 sin.sin_family=AF_INET;
                sin.sin_port=htons(2345);
                sin.sin_addr.s_addr=INADDR_ANY; 
                bzero(&(sin.sin_zero),8);
                sin_size=sizeof(struct sockaddr_in);
                if ((bind(sd, (struct sockaddr *)&sin,sizeof(sin)) == -1) ||
                    (listen(sd, 10 ) == -1)) 
                {
                        perror( "socket.c: Error in bind() or listen()" );
                        return -1;
                }
printf( "n========= success bind ========= n" );

FD_ZERO(&fds);
FD_SET(sd,&fds);
maxfd=sd;

while(1)
{
retval = select(maxfd+1, &fds, NULL, NULL, NULL);  
printf("retval: %dn",retval);
if(retval)
{
printf("sd : %dn",sd);
printf("fd_isset sd val : %dn",FD_ISSET(sd, &fds));
if(FD_ISSET(sd, &fds))    
{
printf("11111111111111n");
new_fd = accept(sd,(struct sockaddr *)&sin, &sin_size );
if( new_fd maxfd)?new_fd:maxfd;
FD_SET(new_fd, &fds);
fd_num++;

}
else {
printf("33333333333333333n");
return 0;}
}

}
}

|
把这句:
FD_SET(sd,&fds); 
放在while内部.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • 数据库 iis7站长之家
  • java 中 SOCKET 的ACCEPT函数有返回值吗?怎样返回才是正常的?
  • 当close(socket)时,为什么linux下slect不返回而windows下就返回??????????
  • socket read返回问题
  • PF_PACKET,socket返回-1
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • socket send的返回值
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • 请教: read一个socket, read返回需要多长时间?
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  • 求助UDP socket sendto返回EHOSTDOWN的问题
  • err=sock->ops->setsockopt(sock, SOL_SOCKET, ...);返回值代表的含义?
  • linux c socket http编程 返回http消息体出错!
  • socket编程accept返回值为0,是否正常?
  • socket关闭后为什么recv不返回
  • (请高手救命啊!在线等)Socket Send的时候,不停的得到EINTR错误返回, 请问是为什么?
  • 求助socket编程问题:C/S模式.客户端调用Winsock函数connect()的时候,返回错误码是10065(主机路由不可达).
  • socket 客户端connect后返回错误:no route to host.急!!
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3