当前位置: 技术问答>linux和unix
Socket connet的一些疑问
来源: 互联网 发布时间:2017-04-30
本文导语: 基于TCP协议, client链接server。 client程序如下: ........ result = connect(vars->clientsocketfd,(struct sockaddr *)&vars->client,sizeof(struct sockaddr)); if( result == 0 ) return true; else if(result == -1) { timeval tm ; f...
基于TCP协议, client链接server。
client程序如下:
Server 代码
当client第一次连接上 server,此时可以正常通信。
但是当client端关闭socket,再次链接server端,
为什么client端还是显示连接成功?
而且都是每次走 result == -1,error== 0这个逻辑。
请问为什么会出现这个问题?
client程序如下:
........
result = connect(vars->clientsocketfd,(struct sockaddr *)&vars->client,sizeof(struct sockaddr));
if( result == 0 )
return true;
else if(result == -1)
{
timeval tm ;
fd_set set ;
int len = sizeof(int) ;
int error = -1 ;
tm.tv_sec = 0 ;
tm.tv_usec = timeout*1000 ;
FD_ZERO( &set ) ;
FD_SET(vars->clientsocketfd, &set);
if( select((int)vars->clientsocketfd + 1 , NULL, &set, NULL, &tm) > 0)
{
if ( getsockopt(vars->clientsocketfd, SOL_SOCKET, SO_ERROR, (char *)&error, &len) ==0 )
if(error == 0)
return true;
}
}
......
Server 代码
.....
if( listen(vars->serversocketfd,1) == -1)
return false;
struct sockaddr_in clientaddr ;
socklen_t len = sizeof(clientaddr) ;
char buffer[20] ;
vars->clientsocketfd = accept(vars->serversocketfd,(struct sockaddr*)&clientaddr,&len) ;
if( vars->clientsocketfd != INVALID_SOCKET )
{
...........
return true;
}
......
当client第一次连接上 server,此时可以正常通信。
但是当client端关闭socket,再次链接server端,
为什么client端还是显示连接成功?
而且都是每次走 result == -1,error== 0这个逻辑。
请问为什么会出现这个问题?
|
不是这个,我说的是你在建立socket的时候,是否绑定了端口号呢?
把绑定端口号服务端客户端的代码贴上来看看!