socket之shutdown发送FIN测试
来源:互联网 发布:python 蓝牙读取 编辑:程序博客网 时间:2024/06/13 19:47
服务器: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);
}
{
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;
}
#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;
}
抓取报文后发现三次握手成功,也就说不用调用accept就可以三次握手。
客户端代码调用shutdown时,报文中发现fin报文,也就是说调用shutdown是关tcp连接。
调用shutdown后,再调read没有返回-1,而是返回0,这倒没有预料到。后来证实,直接掉close,再read会返回-1,错误原因:bad descriptor.
验证了之前的猜想,socket只不过是个文件,关联了协议栈中的Tcp资源,调close是把文件和协议栈资源一起释放。而调shutdown是先释放协议栈中资源。再调用close就不发送fin了,只关socket文件描述符。
- socket之shutdown发送FIN测试
- Socket之shutdown()用法
- Socket之shutdown()用法
- Socket之shutdown()用法
- socket之shutdown()用法
- Socket之shutdown()用法
- Socket之shutdown()用法
- Socket之shutdown()用法
- Socket Shutdown
- socket shutdown
- 测试Shutdown
- 网络编程Socket之TCP之close/shutdown详解
- 网络编程Socket之TCP之close/shutdown详解
- 网络编程socket之close与shutdown函数
- socket关闭之close()和shutdown()的差异
- socket编程之udp发送 .
- socket close vs shutdown
- socket和shutdown
- patch
- java中Servlet处理乱码
- GAC
- nfs mount 设置文件服务器
- Android Button控件的使用
- socket之shutdown发送FIN测试
- MeeGo Harmattan不是MeeGo的Harmattan
- JDeveloper开发工具 类之间无法引用
- Hadoop+Hbase+Zookeeper安装
- 使用.NET Reflector插件FileDisassembler还原源码
- 【smarty】smarty自定义函数
- Android游戏开发框架Libgdx的使用(一)--Libgdx基础入门
- java编程之合并两个文件内容
- uva 191 Intersection