- 论坛徽章:
- 0
|
自己写的TCP服务程序,客户端非正常关闭软件几次以后,会产生这种现象:客户端connect成功,但服务器程序没accept,求解。
服务器端部分代码如下
- if (setsockopt(slisten, SOL_SOCKET, SO_REUSEADDR, &option, sizeof( option )) < 0) {
- printf( "setsockopt\n" );
- }
-
-
- if (bind(slisten, (struct sockaddr *)&local_addr, sizeof(local_addr)) == -1) {
- log("tcp server bind error\n");
- perror("bind\n");
- // exit(1);
- }
-
- if(listen(slisten,20) != 0){
- log("监听失败\n");
- return 0;
-
- }
- for(i=0; i<MAX_CLIENT_NO; i++) {
- client[i].fd = -1;
- }
- FD_ZERO(&allset);
- FD_SET(slisten, &allset);
- maxfd_net = slisten+1;
- printf("maxfd_net = %d\n",maxfd_net);
-
- printf("Waiting for connections and data...\n");
- net_ready= select(maxfd_net, &rset, NULL, NULL, &tv);
-
- if(net_ready == -1)
- {
- log("[tcp_sever]select error\n");
- perror("select:\n");
- }
- if(net_ready > 0)
- {
-
- if(FD_ISSET(slisten,&rset))
- {
- len=sizeof(struct sockaddr);
- if((connect_fd = accept(slisten,(struct sockaddr*)&remote_addr,&len)) == -1)
- {
- printf("accept error\n");
- log("[tcp server]accept error\n");
- return;
- }
复制代码 |
|