- 论坛徽章:
- 0
|
本帖最后由 yp17 于 2010-04-16 12:19 编辑
服务端代码如下:
msfd = socket( PF_INET, SOCK_STREAM, 0 );
if ( msfd < 0 ) return(-1);
memset( &svraddr, 0, sizeof(svraddr) );
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = htonl(INADDR_ANY);
svraddr.sin_port = htons( port );
if (setsockopt(msfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0){
return (-1);
}
if (bind(msfd,(struct sockaddr *)&svraddr,sizeof(svraddr)) < 0 ) {
return(-1);
}
listen( msfd, lqlen );
while (1) {
ssfd = accept( msfd, cltip, &cltport);
if ( ssfd == -1 ) {
bflerrlog(E_ERRMSG,_FL_,"_sclsock_svraccept failed.\n");
break;
}
switch ( fork() ) {
case 0 :
close(msfd);
recv(s,pktptr,pktlen,0)) < 0 ) ;
×××××××××××××××
一堆业务处理。。。
×××××××××××××××
write( fd,ptr,maxn );
close(ssfd);
return(0);
default :
close(ssfd);
break;
case -1 :
close(ssfd);
return(1);
}
出错情况如下:
1、第一次客户端发起请求,服务端程序卡在“业务处理”因为特殊原因卡死。
2、在服务端卡死的情况下再次发起导致服务器卡死的请求,服务端可以接受客户端请求,但运行到业务处理的地方卡住。
3、此时客户端发再起一个不会引起服务端卡死的请求,服务端可以正常处理完成并返回。
4、此时再发起任何请求,服务器均无响应,服务端程序停在recv处。。
请帮忙看看咋回事? 谢谢! |
|