- 论坛徽章:
- 0
|
socket的io操作为什么有的时候会阻塞?
代码挺长的,有耐心的朋友看看吧.
server(要在openvms中运行)
void main()
{
printsystime(systime); //将系统时间放在systime数组里并打印出来
sock=socket(AF_INET, SOCK_STREAM,0); //建立套接字
if(sock<0)
{ perror("opening stream socket failed/n" ;
exit(0);}
setsockopt(sock,SOL_SOCKET,SO_SNDBUF,(const char*)& Sndbuf,sizeof(int));
server.sin_family=AF_INET;
server.sin_port=htons(8800);
server.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(bind(sock,(struct sockaddr *)&server,sizeof(server))<0)
{
perror("binding stream socket" ;
closesocket(sock);
}
printf("port #%d\n",ntohs(server.sin_port));
length=sizeof(server);
if(getsockname(sock,(struct sockaddr *)&server,&length)<0)
perror("getting socket name" ;
int time=1;
while(true)
{
err=listen(sock,1);
printf("listen..." ;
if(err!=0)
{
printf("listen failed" ;
closesocket(sock);
}
len=sizeof(struct sockaddr);
msgsock=accept(sock,(struct sockaddr*)&tcpaddr,(int *)&len);
if (msgsock==-1)
perror("accept failed\n" ;
else
{
if(time==2) //从第二次开始就发送数据
{
printsystime(buf);
GetChar(data0,buf,DATAnum);
rval=send(msgsock,buf, sizeof(buf),0);
if(rval<=0)perror("接收出错" ;
if(rval>;0)printf
("sendsuccessful ); }
if(time==1)//第一次就接受数据
{
printf("begin to recv\n" ;
memset(buf,0,sizeof(buf));
rval=recv(msgsock,buf,10000,0);
if(rval>;0)
{分析接收到的数据;
time=2;} //下一次发送数据
else printf("recv error\n" ;
}
closesocket(msgsock);
}
}
closesocket(sock);
} |
|