- 论坛徽章:
- 0
|
偶写了一个简单的tcp 并发的服务器小程序,不过遇到一个小问题,因为初学不久,向各位达达请教一下:
源码如下:
main()
{
sock1=socket();
bread=setsockopt(serverSocket,SOL_SOCKET,SO_RCVTIMEO | SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));
bind();
listen();
while(1)
{
sock2=accept();
if((child=fork())==0) //创建一个子进程
{
while(1)
{
read();
if(!sub()) //问题就出在这儿
{
printf(error!);
break;
}
else
{
printf("OK" ;
}
}
printf("Connection closed by client.\n" ;
close(sock2);
exit(0);
}
else if(child==-1)
……
close(sock2);
}
return 0;
}
//---------------------------------------------------
我遇到的问题是:在调用一个验证用的子函数sub时候,本意是验证成功,输出一个OK,继续执行,否则输出错误信息,退出当前连接;
可是我的问题在于,收到客户端正确的信息后,服务器就没有反映了(像是当前连接被挂起了),并不会输出OK,直到等到客户端断开连接的时候,才输出原来就应该输出的OK。而收到错误的信息,则正常地输出error,断开连接!
原来以为是阻塞造成了,又设了O_RCVTIMEO | SO_SNDTIMEO 选项,可是还是不见效!
想请教一个各们,这是哪儿出错了? |
|