【求助】linux下socket编程 sento函数message too long
socket吧
全部回复
仅看楼主
level 1
i_Valiant 楼主
数据设置长度也没有超过udp最大限制啊
#define BUFFERSIZE 20000/*发送缓冲区大小*/
static unsigned char send_buff[BUFFERSIZE];
static int data_len=1500;
2016年06月14日 12点06分 1
level 1
i_Valiant 楼主
求高手指点!
这是我的发送函数:
/* 发送ICMP回显请求包 */
static void * icmp_send(void *argv)
{
struct timeval tv;
tv.tv_usec = 0;
tv.tv_sec = 1;
/* 保存程序开始发送数据的时间 */
gettimeofday(&tv_begin, NULL);
while(alive)
{
//9.
int len ; //用来记录ip头部字节长度。
int size = 0;
struct timeval tv;
gettimeofday(&tv, NULL);/*当前包的发送时间*/
//10.
int on = 1;
setsockopt(rawsock, IPPROTO_IP, IP_HDRINCL, (void*)&on, sizeof(on)); //使sendto不添加默认的头部
ip_packk((struct iphdr*) send_buff, &len); //加上IP头部。
icmp_pack((struct icmp *)(send_buff+len), packet_send, &tv,data_len);/*加上icmp头部*/
//这两句话中的data_len参数代表icmp包数据部分的长度。
//如果设置setsockopt,自己指定Ip 头部。在这里别忘了加20。
size = sendto (rawsock,send_buff,data_len+28, 0,(struct sockaddr *)&dest,sizeof(dest) ); /*发送给目的地址*/
if(size <0)
{
perror("sendto error");
//continue;
}
else
{
/* 在发送包状态数组中找一个空闲位置 */
pingm_pakcet *packet = icmp_findpacket(-1);
if(packet)
{
packet->seq = packet_send;/* 设置seq */
packet->flag = 1;/* 已经使用 */
gettimeofday( &packet->tv_begin, NULL);/* 发送时间 */
packet_send ++;/* 计数增加 */
}
}
/* 每隔一秒,发送一个ICMP回显请求包 */
sleep(1);
}
//printf("icmp_send_end!\n");
}
2016年06月14日 12点06分 2
1