博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket之shutdown发送FIN测试
阅读量:4111 次
发布时间:2019-05-25

本文共 1216 字,大约阅读时间需要 4 分钟。

服务器:arm7管理板 vxworks5.5
程序运转起来后,手动调用使socket监听
void Shut(
void)
{
    
int Sfd;
    
struct sockaddr_in Sa;
    Sfd
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    Sa.sin_family
= AF_INET;
    Sa.sin_port
= htons(
103);
    Sa.sin_addr.s_addr
= htonl(INADDR_ANY);
    bind(Sfd, (
struct sockaddr
*)
&Sa,
sizeof(Sa));
    listen(Sfd,
5);      
}
 
 
客户端运行于ubuntu10.04上
 
#
include
<stdio.h
>
#
include
<sys
/types.h
>
#
include
<sys
/socket.h
>
#
include
<unistd.h
>
#
include
<arpa
/inet.h
>
int main( )
{
    
int                Cfd, ret;
    
struct sockaddr_in Ca;
    
char               buf[
20];
    Cfd                
= socket( AF_INET, SOCK_STREAM,
0 );
    Ca.sin_family      
= AF_INET;
    Ca.sin_port        
= htons(
103 );
    Ca.sin_addr.s_addr
= inet_addr(
"222.111.112.204" );
//已经默认转为大端模式
    ret
= connect( Cfd, (
struct sockaddr
*)
&Ca,
sizeof( Ca ) );
    getchar( );
    
if( ret
>
=
0 )
    {
        shutdown( Cfd,
2 );
    }
    getchar( );
    ret
= read( Cfd, buf,
19 );
    printf(
"read return %d", ret );
//代码验证返回0
    
if( ret
<
0 )
    {
        perror(
"read error" );
    }
    getchar( );
    
return
0;
}
 
  1. 抓取报文后发现三次握手成功,也就说不用调用accept就可以三次握手。
  2. 客户端代码调用shutdown时,报文中发现fin报文,也就是说调用shutdown是关tcp连接。
  3. 调用shutdown后,再调read没有返回-1,而是返回0,这倒没有预料到。后来证实,直接掉close,再read会返回-1,错误原因:bad descriptor.
  4. 验证了之前的猜想,socket只不过是个文件,关联了协议栈中的Tcp资源,调close是把文件和协议栈资源一起释放。而调shutdown是先释放协议栈中资源。再调用close就不发送fin了,只关socket文件描述符。

转载地址:http://uuesi.baihongyu.com/

你可能感兴趣的文章
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>