- 论坛徽章:
- 0
|
本帖最后由 babycat_fei 于 2012-05-10 09:46 编辑
客户端程序:
#include...
#include...
#include...
#include...
#include...
#include...
typedef struct{
unsigned char code;
unsigned char len;
unsigned char offset;
unsigned long address[1];
}LSR;
int main()
{
LSR sourceRoute;
memset(&sourceRoute,'\0',sizeof(LSR));
sourceRoute.code = 0x83;
sourceRoute.len = 7;
sourceRoute.offset = 4;
sourceRoute.address[0] = inet_addr("ip_inter");//ip_inter为中间节点的ip
fd = socket(AF_INET,SOCK_STREAM,0);
sevaddr.sin_family = AF_INET;
sevaddr.sin_addr.s_addr= inet_addr("ip");//ip为源节点ip
sevaddr.sin_port = htons(6100);
//加上下面这句设置ip选项为源路由就连接超时了,去掉就可以成功连接
setsockopt(fd, IPPROTO_IP, IP_OPTIONS, (char*)$sourceRoute, sourceRoute.len);
connect(fd, (struct sockaddr *)&sevaddr, sizeof(sevaddr));
write(...);
read(...);
close(fd);
return 1;
}
阻塞模式,客户端connect时,总是返回EINPROGRESS,查看了一下端口状态卡在SYN_SENT,连接不上;改为非阻塞模式connect时,select返回0,连接超时。去掉setsockopt设置源路由那句一切正常,但查看了一下这个函数的返回值是正确的,不知为什么设了源路由后就连接不上了,网络都可以ping通。 |
|